Polyglots เป็นโปรแกรมที่ใช้ได้ในหลายภาษาการเขียนโปรแกรมพร้อมกัน รูปหลายเหลี่ยมดังกล่าวส่วนใหญ่เขียนในลักษณะที่โครงสร้างบางอย่างของภาษาหนึ่งถูกตีความว่าเป็นความคิดเห็นของภาษาอื่น (เช่น#define
ในภาษา C ถูกตีความว่าเป็นความคิดเห็นในหลายภาษาสคริปต์)
ฉันอยากรู้ว่ามันเป็นไปได้ไหมที่จะสร้างรูปหลายเหลี่ยมที่ไม่มีความคิดเห็นซึ่งไม่มีความคิดเห็น แต่ก็เปลี่ยนทันทีเมื่อคุณลบตัวอักษรที่ไม่ใช่ช่องว่างออกฉันจึงขอให้คุณลองใช้โปรแกรมเช่นนั้น
กฎที่เป็นรูปธรรมมีดังนี้:
- (ขาออก) โปรแกรมของคุณต้องสร้างเอาต์พุตบางส่วนบนคอนโซลภายใต้แต่ละภาษาของคุณ นั่นคือโปรแกรมของคุณไม่ได้รับอนุญาตให้ออกโดยไม่พิมพ์อะไรเลย
- (ความแปรปรวน) เนื่องจากเป็นการผ่อนคลายของคำจำกัดความหลายภาษามาตรฐานเอาท์พุทของโปรแกรมอาจแตกต่างกันระหว่างภาษา
- (ข้อผิดพลาด) โปรแกรมของคุณจะต้องไม่สร้างข้อผิดพลาด (กำหนดอย่างกว้าง ๆ ) ภายใต้ภาษาใด ๆ ของคุณ สำหรับภาษาส่วนใหญ่จะถูกกำหนดให้ส่งคืนโค้ดออกที่ไม่เป็นศูนย์จากคอมไพเลอร์และ / หรือล่าม
- ( จำกัด ) การกำจัดของตัวละครที่ไม่ใช่ช่องว่างใด ๆ เดียวจากรหัสของคุณควรจะทำให้โปรแกรมของคุณจะเปลี่ยนพฤติกรรมของตนภายใต้ทุกภาษาใดภาษาหนึ่งของคุณ โปรแกรมอาจ "เปลี่ยน" โดยไม่ถูกต้องสำหรับภาษานั้นหรือโดยการเปลี่ยนผลลัพธ์ที่ผลิต
- นี่คือความท้าทายรหัส ผู้ชนะคือโปรแกรมที่ถูกต้องในภาษาการเขียนโปรแกรมส่วนใหญ่ ความสัมพันธ์จะขาดไปเนื่องจากความยาวของโปรแกรมสั้นลง
กฎการ จำกัด ใช้ไม่ได้กับการลบอักขระหลายตัว กล่าวคือมันเป็นการดีถ้าลบอักขระหลายตัวพร้อมกันทำให้ไม่มีการเปลี่ยนแปลงในภาษาใดภาษาหนึ่งของคุณ
สังเกตว่ากฎข้อ จำกัด บ่งบอกว่าคุณไม่สามารถใช้ช่องว่างเป็นหนึ่งในภาษาของคุณได้เนื่องจากการลบอักขระที่ไม่ใช่ช่องว่างออกจะไม่เปลี่ยนพฤติกรรมของโปรแกรมช่องว่าง
นี่เป็นตัวอย่างง่ายๆของโปรแกรมที่ปฏิบัติตามข้อ จำกัด ข้างต้นทั้งหมดสำหรับภาษา Python 2 และ Python 3:
print("Hello World!")
การลบอักขระใด ๆ ในprint
จะทำให้ทั้งสองภาษาโยนNameError
; การลบเครื่องหมายวงเล็บเหลี่ยมหรือเครื่องหมายคำพูดจะทำให้ a SyntaxError
และตัวอักขระสตริงใด ๆ จะเปลี่ยนผลลัพธ์ในทั้งสองภาษา (โปรดทราบว่าprint("hello", "world")
เป็นโปรแกรมที่ละเอียดกว่า แต่ยังคงใช้ได้ภายใต้กฎข้างต้น)
ตัวอย่างนี้เป็นบิตง่อยเพราะ Python 2 และ Python 3 คล้ายกันมากดังนั้นฉันจะไม่ยอมรับวิธีแก้ปัญหาอื่น ๆ ที่ใช้ภาษาเดียวกันรุ่นต่าง ๆ เท่านั้น (โดยเฉพาะ Python 2 และ Python 3)
print("Hello World!")
เป็นรหัส Ruby ที่ใช้ได้