ความท้าทาย
ในความท้าทายนี้คุณระบุภาษาต้นฉบับ S
และภาษาเป้าหมาย T
งานของคุณคือการเขียนโปรแกรมดังต่อไปนี้ในภาษาที่P
S
ถ้าเป็นโปรแกรมที่ถูกต้องQ
ในภาษาที่T
จะได้รับเป็น input เพื่อP
มันจะได้ผลลัพธ์เป็นโปรแกรมที่ถูกต้องR
ในภาษาที่T
ซึ่งจะเข้าไม่ได้และเอาท์พุทQ(R)
ที่เป็นโปรแกรมที่นำไปใช้กับรหัสที่มาของQ
นอกจากนี้คุณควรจะนำเสนอในคำตอบของคุณโปรแกรมตัวอย่างขี้ปะติ๋ว(น่าสนใจมากขึ้นดีกว่าแม้ว่าคุณแต้มสำหรับเรื่องนี้) โปรแกรมส่งผลและการส่งออกของ นี่คือรหัสกอล์ฟดังนั้นรหัสที่สั้นที่สุดสำหรับการชนะR
Q
R
R
P
กล่าวอีกนัยหนึ่งนี่เป็นความท้าทายเกี่ยวกับการเขียน "ตัวสร้างควินสากล" ซึ่งสามารถสร้างประเภททั่วไปได้ตามอำเภอใจ
ชี้แจง
- ภาษาต้นทางและเป้าหมายของคุณอาจเหมือนกัน
- โปรแกรมที่
P
ควรใช้เวลาหนึ่งสตริงเป็น input (จาก STDIN หรือเทียบเท่า) และสตริงหนึ่ง output (เพื่อ STDOUT หรือเทียบเท่า)R
เป็นโปรแกรมควรส่งออกทุก - โปรแกรมอินพุต
Q
ควรแปลงสตริงเป็นสตริงอื่น แต่รูปแบบมีความยืดหยุ่นมากขึ้น: สามารถเป็นฟังก์ชั่นแบบสตริงต่อสตริง, โค้ดขนาดเล็กที่ปรับเปลี่ยนตัวแปรด้วยชื่อที่แน่นอน, สนิปเพตที่ปรับเปลี่ยนสแต็คข้อมูลหากภาษาเป้าหมายของคุณ มีหนึ่งรายการและอื่น ๆ คุณสามารถ จำกัด รูปแบบของรายการเพิ่มเติมQ
โดยระบุว่าตัวอย่างเช่นพวกเขาอาจไม่มีความคิดเห็นใด ๆ อย่างไรก็ตามคุณต้องสามารถใช้ฟังก์ชัน string-to-string ที่คำนวณได้ใด ๆ เป็นโปรแกรมอินพุตQ
และคุณต้องระบุอย่างชัดเจนถึงวิธีการทำงานของฟังก์ชันและข้อ จำกัด เพิ่มเติมที่คุณมีต่อฟังก์ชันเหล่านั้น - โปรแกรมเอาต์พุต
R
ควรเป็น quine (ทั่วไป) ดังนั้นจึงต้องไม่อ่านอินพุตใด ๆ (อินพุตของผู้ใช้ไฟล์ ฯลฯ ) เว้นแต่Q
จะเป็นเช่นนั้น - ช่องโหว่มาตรฐานไม่ได้รับอนุญาต
ตัวอย่าง
สมมติว่าฉันเลือก Python เป็นภาษาต้นฉบับของฉันและ Haskell เป็นภาษาเป้าหมายของฉันและฉันต้องต่อว่าโปรแกรมการป้อนข้อมูลที่ควรจะเป็นความหมายหนึ่งบรรทัดของฟังก์ชั่นการตั้งชื่อString -> String
f
ถ้าฉันให้โปรแกรมย้อนกลับสตริง
f x = reverse x
เป็นข้อมูลในการเขียนโปรแกรมหลามของฉันก็จะออกรหัสที่มาของโปรแกรมP
Haskell อื่น R
โปรแกรมนี้พิมพ์ไปที่ STDOUT ซอร์สโค้ดของR
แต่กลับด้าน หากP
ได้รับฟังก์ชั่นตัวตน
f x = x
เป็นอินพุตโปรแกรมเอาต์พุตR
เป็น quine