ouroboros quine 128 ภาษานี้ (โปรแกรมที่ส่งออกโปรแกรมในภาษาอื่นซึ่งส่งออกโปรแกรมในภาษาอื่น (125 ภาษาในภายหลัง) ซึ่งแสดงผลโปรแกรมต้นฉบับ) ค่อนข้างน่าประทับใจ แต่น่าเสียดายที่มันมีการวนซ้ำแบบคงที่
เขียนโปรแกรมที่แสดงผลโปรแกรม (ไม่จำเป็นต้องเป็นภาษาอื่น แต่สามารถเป็นได้) ซึ่งแสดงผลโปรแกรมซึ่งแสดงผลโปรแกรม ฯลฯ ซึ่งหลังจากทำซ้ำแล้ว n จะแสดงผลลัพธ์โปรแกรมต้นฉบับเป็นครั้งแรก (เช่นไม่มีสื่อกลาง โปรแกรมควรเหมือนกันกับต้นฉบับเพราะไม่เช่นนั้นควินที่ไม่สนใจอินพุตจะทำงานได้) โดยที่ n เป็นจำนวนเต็มที่ไม่เป็นลบที่จัดเตรียมให้เป็นอินพุต ข้อมูลที่ป้อนต้องไม่เป็นตัวเลขในซอร์สโค้ดต้นฉบับ (เช่นx = <the value of n>
เริ่มต้นโปรแกรมของคุณ) ซึ่งควรเป็นหนึ่งในสิ่งต่อไปนี้:
- ส่งผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่ง
- อ่านจากอินพุตมาตรฐาน
- ส่งผ่านเป็นอาร์กิวเมนต์ไปยังฟังก์ชันซึ่งส่งคืน / ส่งออกโปรแกรมใหม่
สำหรับสเตจกลางใน ouroboros โปรแกรมของคุณอาจเป็นโปรแกรมที่ทำงานได้อย่างสมบูรณ์หรือฟังก์ชั่นที่ไม่มีข้อโต้แย้งซึ่งเมื่อเรียกแล้วจะส่งคืน / ส่งออกในส่วนถัดไป
คุณไม่สามารถอ่านจากไฟล์ต้นฉบับเองหรือใช้บิวอินเหมือนควินิน (ฉันไม่คิดว่าจะมีสิ่งใดที่จะทำสิ่งนี้ แต่อาจมี)
เพื่อความชัดเจนหากn = 0
โปรแกรมควรส่งออกซอร์สโค้ดของตัวเอง
หากn = 1
โปรแกรมควรแสดงผลเป็นโปรแกรมอื่นซึ่งจะแสดงรหัสต้นฉบับดั้งเดิม
และอื่น ๆ ...
ไบต์ที่น้อยที่สุดจะชนะ!
แก้ไข:
ฉันควรเขียนว่า "สำหรับสเตจกลางใน ouroboros โปรแกรมของคุณอาจเป็นโปรแกรมที่ทำงานได้อย่างสมบูรณ์โดยไม่มีอินพุตหรือฟังก์ชันที่ไม่มีอาร์กิวเมนต์" หากโปรแกรมของคุณส่งออกรายการถัดไปในกลุ่มจากนั้นรอการป้อนข้อมูลนั่นเป็นเรื่องปกติ แต่โปรแกรมของคุณไม่จำเป็นต้องมีค่าดั้งเดิมเท่ากับ n
getInput()
มีการใช้งานบางอย่างโดยไม่มีการป้อนข้อมูลใด ๆ หรือเราสามารถขอพูดอะไรบางอย่างการป้อนข้อมูลแบบสุ่มที่ไม่ได้ใช้สำหรับการทำซ้ำในภายหลังเพื่อป้องกันข้อผิดพลาดสำหรับgetInput()
? Aka เป็นคำตอบของ Python ที่ถูกต้องหรือไม่?
n
ออกโปรแกรมที่เป็น "โปรแกรมเริ่มต้น" ของการn
วนซ้ำของ ouroboros และคำตอบของเราไม่ควรนับเป็นหนึ่งในการn
ทำซ้ำ ถูกต้องหรือไม่