Quine คือโปรแกรมที่ไม่รับ input แต่ออกมาเป็นซอร์สโค้ดของตัวมันเอง มีเงื่อนไขว่า ห้ามเปิดอ่านไฟล์ซอร์สโค้ดเอง ภายในโปรแกรม
ตัวอย่าง Quine สั้นที่สุดใน Python
a='a=%r;print (a%%a)';print (a%a)
ผลลัพธ์
a='a=%r;print (a%%a)';print (a%a)
ทำไมมันทำงานได้?
ใช้ string formatting แบบง่าย:
- กำหนดตัวแปร
aเก็บสตริง'a=%r;print (a%%a)' %rคือ repr formatting จะใส่ค่าaพร้อม quotes และ escape characters%%จะกลายเป็น%ตัวเดียวใน output- เมื่อ
print(a % a)รัน จะแทนค่าaลงใน%rได้ซอร์สโค้ดเดิมทุกตัว
วิธีที่ "โกง" (ไม่ใช่ Quine จริง)
print(open(__file__).read())
แต่วิธีนี้ ละเมิดกฎของ Quine เพราะเปิดอ่านไฟล์ตัวเอง
Quine อื่นๆ ที่น่าสนใจ
Multi-line Quine
s = 's = %r\nprint(s %% s)'
print(s % s)
Quine ใช้ format()
s = 's = {!r}\nprint(s.format(s))'
print(s.format(s))
Quine ใช้ f-string (Python 3.6+)
s = 's = {0!r}\nprint(s.format(s))'
print(s.format(s))
ความสนุก: Quine เป็นหัวข้อใน Computer Science ที่เกี่ยวกับ self-replication และ fixed-point theorem มีความเกี่ยวข้องกับทฤษฎีคำนวณ (computability theory)