Quine là chương trình không nhận input nhưng in ra chính source code của mình. Không được đọc file nguồn (__file__).
Quine ngắn gọn nhất Python
a='a=%r;print(a%%a)';print(a%a)
Giải thích cơ chế
a = 'a=%r;print(a%%a)'– Gán chuỗi chứa code template.%r– Format repr() của chuỗi (kèm dấu nháy, escape).a%%a– Thay%rbằngrepr(a),%%thành%.- Kết quả: chuỗi gốc được in y hệt.
Phân tích bước a bước
a = 'a=%r;print(a%%a)'
# a = "a='a=%r;print(a%%a)';print(a%a)"
print(a % a)
# Thay %r → repr(a) = "'a=%r;print(a%%a)'"
# Kết quả: a='a=%r;print(a%%a)';print(a%a)
Quine đa dòng (đọc file - vi phạm quy tắc)
# Cách này KHÔNG phải Quine chuẩn (đọc file)
print(open(__file__).read())
Quine phức tạp hơn (có comment, docstring)
s = 's = %r\nprint(s %% s)'
print(s % s)
Ý nghĩa
- Minh họa self-replication, recursion, fixed point.
- Cơ sở lý thuyết: Kleene's recursion theorem.
- Ứng dụng: code golf, obfuscation, compiler testing.