Quine lấy tên đầu vào của một ngôn ngữ và xuất ra cùng một thứ được thực hiện trong ngôn ngữ đầu vào


15

Từ trung tâm Quine :

Viết một câu hỏi lấy tên của ngôn ngữ và xuất ra điều tương tự được thực hiện trong ngôn ngữ đầu vào.

Bài viết nguồn có một cái gì đó bạn có thể làm việc, nhưng như tác giả nói điều này khó hơn nhiều. Rõ ràng bạn chỉ cần hỗ trợ một bộ ngôn ngữ hạn chế. Sự lựa chọn là của bạn, cũng như ngôn ngữ cơ bản.

Là một , điểm số của bạn sẽ là số ngôn ngữ mà chương trình của bạn hỗ trợ; Cao hơn thì tốt hơn.


Tiêu đề hấp dẫn ...
FlipTack

Xác định "số lượng ngôn ngữ".
Adám

@ Adám: Chà, vấn đề của thách thức là viết một chương trình hỗ trợ một bộ ngôn ngữ, như sau: đặt cho nó tên của bất kỳ ngôn ngữ nào làm đầu vào sẽ tạo ra một chương trình tương đương trong ngôn ngữ đó. Số lượng ngôn ngữ mà chương trình hoạt động là kích thước của tập hợp. Đây không phải là thử thách của tôi (chỉ là một lần tôi đã trả tiền), vì vậy tôi không nghĩ có một nguồn "chính thức" nào cho các vụ kiện ở góc; như vậy, tất cả chúng ta có thể và nên hợp tác chỉnh sửa thử thách để làm cho nó tốt hơn / rõ ràng hơn mà không thay đổi ý nghĩa.

@ ais523 Điều gì ngăn chúng ta viết một quine polyglot lấy đầu vào và không làm gì với nó? Điều đó là hoàn toàn hợp pháp theo các quy tắc này.
mbomb007

@ mbomb007: đó là hợp pháp, nhưng có thể không phải là cách dễ nhất để trả lời câu hỏi. Các quines polyglot thường khó có thể phù hợp với các ngôn ngữ bổ sung, trong khi câu hỏi như hiện tại không yêu cầu bạn phải viết một polyglot (và có thể được giải quyết thông qua một tập hợp các hàm tạo quine phổ biến, mỗi ngôn ngữ bạn sử dụng).

Câu trả lời:


4

Hồng ngọc

require 'json';s=%q[{"ruby":[" %q[","require 'json';s=##;j=JSON.load s;puts j[l=gets.chomp][1].sub('##',j[l][0].delete(' ')+s+j[l][2].delete(' '))"," ]"],"python":["' ''","import json,re;s=##;j=json.loads(s);l=raw_input();print(re.sub('##',j[l][0].replace(' ','')+s+j[l][2].replace(' ',''),j[l][1],1))","' ''"]}];j=JSON.load s;puts j[l=gets.chomp][1].sub('##',j[l][0].delete(' ')+s+j[l][2].delete(' '))

Con trăn

import json,re;s='''{"ruby":[" %q[","require 'json';s=##;j=JSON.load s;puts j[l=gets.chomp][1].sub('##',j[l][0].delete(' ')+s+j[l][2].delete(' '))"," ]"],"python":["' ''","import json,re;s=##;j=json.loads(s);l=raw_input();print(re.sub('##',j[l][0].replace(' ','')+s+j[l][2].replace(' ',''),j[l][1],1))","' ''"]}''';j=json.loads(s);l=raw_input();print(re.sub('##',j[l][0].replace(' ','')+s+j[l][2].replace(' ',''),j[l][1],1))

Cả hai phiên bản đều nhận đầu vào trên stdin ( rubyhoặc pythonhiện tại) và tạo đầu ra thành thiết bị xuất chuẩn trong cả hai ngôn ngữ.


1

Turtlèd , Python 2 và Python 3, 3 ngôn ngữ, chỉ cạnh tranh để kiếm tiền thưởng

tất cả các oneliners theo dòng mới

Turtlèd

@##'@r,r,r-{ +.r_}r{ +.r_}!!-.(3"';m=ord(input()[-1]);_='x=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))';print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"367>;++[ d( d)('.)]d<"x='"))(2"';m=ord(raw_input()[-1]);_='x=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))';print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"371>;++[ d( d)('.)]d<"x='"))(d' )#'@r,r,r-{ +.r_}r{ +.r_}!!-.(3"';m=ord(input()[-1]);_='x=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))';print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"367>;++[ d( d)('.)]d<"x='"))(2"';m=ord(raw_input()[-1]);_='x=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))';print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"371>;++[ d( d)('.)]d<"x='"))(d' )

Hãy thử trực tuyến!

Con trăn 2

x='@##y@r,r,r-{ +.r_}r{ +.r_}!!-.(3"y;m=ord(input()[-1]);_=yx=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))y;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"367>;++[ d( d)(y.)]d<"x=y"))(2"y;m=ord(raw_input()[-1]);_=yx=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))y;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"371>;++[ d( d)(y.)]d<"x=y"))(dy )#y@r,r,r-{ +.r_}r{ +.r_}!!-.(3"y;m=ord(input()[-1]);_=yx=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))y;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"367>;++[ d( d)(y.)]d<"x=y"))(2"y;m=ord(raw_input()[-1]);_=yx=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))y;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"371>;++[ d( d)(y.)]d<"x=y"))(dy )';m=ord(raw_input()[-1]);_='x=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))';print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))

Hãy thử trực tuyến!

Con trăn 3

x='@##y@r,r,r-{ +.r_}r{ +.r_}!!-.(3"y;m=ord(input()[-1]);_=yx=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))y;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"367>;++[ d( d)(y.)]d<"x=y"))(2"y;m=ord(raw_input()[-1]);_=yx=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))y;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"371>;++[ d( d)(y.)]d<"x=y"))(dy )#y@r,r,r-{ +.r_}r{ +.r_}!!-.(3"y;m=ord(input()[-1]);_=yx=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))y;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"367>;++[ d( d)(y.)]d<"x=y"))(2"y;m=ord(raw_input()[-1]);_=yx=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))y;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))"371>;++[ d( d)(y.)]d<"x=y"))(dy )';m=ord(input()[-1]);_='x=%r;m=ord(input()[-1]);_=%r;print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%%(x,_) if m==50 else _%%(x,_) if m==51 else x.replace(chr(121),chr(39)))';print(_.replace(chr(100)+chr(40),chr(100)+chr(40)+chr(114)+chr(97)+chr(119)+chr(95))%(x,_) if m==50 else _%(x,_) if m==51 else x.replace(chr(121),chr(39)))

Hãy thử trực tuyến!

Giải trình:

Đối với mỗi ngôn ngữ, tôi lấy các câu hỏi đã được viết và sửa đổi chúng một chút.

Turtlèd đầu tiên:

Turtlèd bao gồm cấu trúc quine tiêu chuẩn. tuy nhiên, nếu đầu vào kết thúc bằng 2 hoặc 3, nó sẽ kết thúc phần cuối của mã python, hoặc 2 hoặc 3, nó bao gồm cả hai riêng biệt, cho đầu ra quine, sau đó quay lại bắt đầu và thêm x='. Mặt khác, mã nguồn còn lại và xuất ra như một quine thông thường

Cũng lưu ý rằng nó cần đầu vào hai lần !!., bởi vì nguồn chứa một dòng mới cung cấp cho đầu vào một dòng trống.

tuy nhiên, dọc theo đường bắt đầu của chuỗi, để tránh thực tế là chuỗi không thể có 'trong chuỗi , nó thay đổi tất cả các 'nguồn chính trong suốt quá trình y. nếu có, trích dẫn thoát có thể gây phiền nhiễu, thậm chí có thể

điều này dựa trên một mánh khóe; Tôi không thể viết (''y), (pseudocode:if cell is ', write y)bởi vì sau đó y sẽ không thể phân biệt được với một '. vì vậy, tôi sử dụng y từ đầu vào "Python"! đây là một khoảnh khắc eureka thực sự đối với tôi.

Sau đó, có những thứ quinelike trăn.

Cách thức hoạt động của con trăn quinelike:

nó hoạt động như một quine thông thường, ngoại trừ nó cũng bao gồm biến x

nếu nó có đầu vào Python 3, nó hoạt động như một quine thông thường và sử dụng định dạng% để bao gồm cả nguồn cho Turtlèd.

nếu nó có đầu vào Python 2, nó sẽ thay thế inputtrong chuỗi bằng raw_inputvà thực hiện điều tương tự chính xác.

nếu đầu vào là Turtlèd, nó sẽ thay thế ys trong nguồn Turtlèd và in nó.

Hai chương trình python hoạt động giống nhau và nhận đầu vào theo cùng một cách

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.