ความท้าทาย
ในความท้าทายนี้คุณระบุภาษาต้นฉบับ Sและภาษาเป้าหมาย Tงานของคุณคือการเขียนโปรแกรมดังต่อไปนี้ในภาษาที่P Sถ้าเป็นโปรแกรมที่ถูกต้องQในภาษาที่Tจะได้รับเป็น input เพื่อPมันจะได้ผลลัพธ์เป็นโปรแกรมที่ถูกต้องRในภาษาที่Tซึ่งจะเข้าไม่ได้และเอาท์พุทQ(R)ที่เป็นโปรแกรมที่นำไปใช้กับรหัสที่มาของQ นอกจากนี้คุณควรจะนำเสนอในคำตอบของคุณโปรแกรมตัวอย่างขี้ปะติ๋ว(น่าสนใจมากขึ้นดีกว่าแม้ว่าคุณแต้มสำหรับเรื่องนี้) โปรแกรมส่งผลและการส่งออกของ นี่คือรหัสกอล์ฟดังนั้นรหัสที่สั้นที่สุดสำหรับการชนะRQRRP
กล่าวอีกนัยหนึ่งนี่เป็นความท้าทายเกี่ยวกับการเขียน "ตัวสร้างควินสากล" ซึ่งสามารถสร้างประเภททั่วไปได้ตามอำเภอใจ
ชี้แจง
- ภาษาต้นทางและเป้าหมายของคุณอาจเหมือนกัน
- โปรแกรมที่
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