Quine ที่ใช้เป็นชื่อของภาษาหนึ่งและป้อนข้อมูลเหมือนกับที่ใช้ในภาษาที่ป้อนข้อมูล


15

จากใจกลาง Quine :

เขียนควินที่ใช้เป็นชื่อของภาษาและเอาท์พุทสิ่งเดียวกันนำมาใช้ในภาษาที่ป้อน

บทความต้นฉบับมีบางสิ่งที่คุณสามารถทำงานได้ แต่ตามที่ผู้เขียนบอกว่ามันยากกว่ามาก เห็นได้ชัดว่าคุณจะต้องสนับสนุนชุดภาษาที่ จำกัด เท่านั้น ทางเลือกเป็นของคุณแม้ว่าเช่นเดียวกับภาษาฐาน

ในฐานะที่เป็นคะแนนของคุณจะเป็นจำนวนภาษาที่โปรแกรมของคุณรองรับ สูงกว่าดีกว่า


ชื่อลวง ...
FlipTack

กำหนด "จำนวนภาษา"
Adám

@ Adám: จุดที่ท้าทายคือการเขียนโปรแกรมที่รองรับชุดภาษาดังต่อไปนี้: ให้ชื่อของภาษาใด ๆ ที่อินพุตจะส่งออกโปรแกรมที่เทียบเท่าในภาษานั้น จำนวนภาษาที่โปรแกรมใช้งานคือขนาดของชุด นี่ไม่ใช่ความท้าทายของฉัน (เพียงคนเดียวที่ฉันโปรดปราน) ดังนั้นฉันจึงไม่คิดว่าจะมีแหล่ง "ทางการ" ในกรณีมุม เช่นนี้เราสามารถและควรแก้ไขความท้าทายร่วมกันเพื่อให้ดีขึ้น / ชัดเจนขึ้นโดยไม่เปลี่ยนความหมาย

@ ais523 มีอะไรที่จะหยุดยั้งเราไม่ให้เขียนโพลีกควินซึ่งป้อนข้อมูลและไม่ทำอะไรเลย นั่นจะถูกกฎหมายอย่างสมบูรณ์แบบตามกฎเหล่านี้
mbomb007

@ mbomb007: ถูกกฎหมาย แต่อาจไม่ใช่วิธีที่ง่ายที่สุดในการตอบคำถาม Polyglot Quines มักจะยากที่จะปรับให้เหมาะกับภาษาเพิ่มเติมในขณะที่คำถามที่เป็นคำพูดในปัจจุบันไม่ต้องการให้คุณเขียนภาษาพูดได้หลายภาษา

คำตอบ:


4

ทับทิม

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(' '))

หลาม

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))

ทั้งสองเวอร์ชันรับอินพุตบน stdin ( rubyหรือpythonปัจจุบัน) และสร้างเอาต์พุตไปยัง stdout ในภาษาใดภาษาหนึ่ง


1

Turtlèd , Python 2 และ Python 3, 3 ภาษาเพียงเพื่อชิงรางวัล

ผู้แจ้งเตือนทุกคนเต็มไปด้วยการขึ้นบรรทัดใหม่

turtled

@##'@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' )

ลองออนไลน์!

Python 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)))

ลองออนไลน์!

Python 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)))

ลองออนไลน์!

คำอธิบาย:

สำหรับแต่ละภาษาฉันได้เขียนคำทดสอบแล้วและแก้ไขพวกเขาเล็กน้อย

Turtlèdก่อน:

Turtlèdรวมถึงโครงสร้าง quine มาตรฐาน อย่างไรก็ตามหากอินพุตสิ้นสุดด้วย 2 หรือ 3 มันจะต่อท้ายจุดสิ้นสุดของรหัสไพ ธ อนไม่ว่าจะเป็น 2 หรือ 3 จะรวมทั้งสองอย่างแยกจากกันไปยังเอาต์พุต quine จากนั้นกลับไปที่จุดเริ่มต้นและเพิ่มx='ก็มีพวกเขาทั้งสองแยกกันเพื่อส่งออกควินและจากนั้นกลับไปที่จุดเริ่มต้นและเพิ่ม มิฉะนั้นซอร์สโค้ดจะถูกทิ้งไว้และส่งออกเหมือน Quine ปกติ

นอกจากนี้โปรดทราบว่าจะต้องป้อนข้อมูลสองครั้ง!!.เนื่องจากแหล่งข้อมูลมีบรรทัดใหม่ที่ฟีดเพื่อป้อนข้อมูลบรรทัดว่าง

อย่างไรก็ตามตลอดเส้นทางจนถึงจุดเริ่มต้นของสตริงเพื่อหลีกเลี่ยงความจริงที่ว่าสตริงไม่สามารถมีได้'มันจะเปลี่ยนทั้งหมด'ในแหล่งข้อมูลหลักไปพร้อมกันyกัน ถ้าเป็นเช่นนั้นการอ้างอิงคำพูดอาจเป็นเรื่องน่ารำคาญหากเป็นไปได้

สิ่งนี้ต้องอาศัยกลลวง ผมไม่ได้เขียน(''y),(pseudocode:if cell is ', write y)แล้วเพราะที่ปีจะได้รับไม่สามารถแยกออกจาก' ดังนั้นฉันใช้ y จากอินพุต "Python"! นี่เป็นช่วงเวลาที่ยูเรก้าที่แท้จริงสำหรับฉัน

จากนั้นมีสิ่งที่หลาม quinelike

วิธีการที่สิ่ง quinelike หลามทำงาน:

มันทำงานเหมือนควินปกติยกเว้นมันยังรวมถึงตัวแปร x

ถ้ามันมีอินพุต Python 3 มันทำงานเหมือนควินินปกติและใช้การจัดรูปแบบ% เพื่อรวมแหล่งที่มาสำหรับTurtlèdด้วย

ถ้ามันมีอินพุต Python 2 มันจะแทนที่inputด้วยสตริงด้วยraw_inputและทำสิ่งเดียวกัน

หากอินพุตเป็นTurtlèdจะแทนที่ys ในแหล่งที่มาของTurtlèdและพิมพ์ออกมา

โปรแกรมไพ ธ อนสองโปรแกรมทำหน้าที่เหมือนกันและรับอินพุตด้วยวิธีเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.