Như chúng ta đã biết, quine là một chương trình xuất ra mã nguồn của chính nó. Tuy nhiên, cũng có thể viết một chương trình tạo ra một chương trình khác, chương trình khác, đưa ra chương trình đầu tiên một lần nữa. Ví dụ, chương trình Python 2
x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3
khi chạy, sẽ xuất văn bản sau:
print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""
Khi chạy dưới dạng chương trình Python, điều này sẽ xuất lại mã gốc. Điều này được gọi là một quine lặp . Bởi vì bạn phải chạy nó hai lần để lấy lại mã gốc, chúng tôi nói rằng nó có giai đoạn 2 . Nhưng tất nhiên, thời gian cao hơn nhiều là có thể.
Thách thức của bạn là viết một câu hỏi lặp đi lặp lại với khoảng thời gian dài nhất có thể, bằng 100 byte hoặc ít hơn , bằng ngôn ngữ bạn chọn. (Lưu ý rằng ví dụ của tôi ở trên không phù hợp với thông số kỹ thuật này, vì nó là 119 byte, bao gồm cả dòng mới.)
Xin lưu ý các quy tắc và làm rõ sau đây:
- Các quy tắc quine thông thường được áp dụng, tức là chương trình của bạn không thể sử dụng các tính năng ngôn ngữ cho phép nó truy cập trực tiếp vào mã nguồn của chính nó.
- Các đầu ra được lặp đi lặp lại cuối cùng phải quay lại chính xác mã ban đầu của bạn và bạn phải bao gồm một minh chứng hoặc bằng chứng rằng nó sẽ.
- Bạn cũng phải bao gồm một lời giải thích về lý do tại sao chu kỳ miễn là bạn nói nó là. Điều này không nhất thiết phải ở cấp độ của một bằng chứng toán học, nhưng nó phải có sức thuyết phục đối với người quen thuộc với ngôn ngữ của bạn. (Quy tắc này có ở đây vì tôi mong đợi một số câu trả lời liên quan đến những con số rất lớn.)
- Thật tốt khi nói điều gì đó như "ít nhất 1.000.000 lần lặp" thay vì đưa ra con số chính xác, miễn là bạn có thể chứng minh rằng nó ít nhất là lâu như vậy. Trong trường hợp này, điểm của bạn sẽ là 1.000.000. Nếu không, điểm số của bạn là khoảng thời gian của bạn.
- Giới hạn 100 byte chỉ áp dụng cho chương trình ban đầu của bạn - các chương trình mà nó tạo ra có thể dài hơn, mặc dù tất nhiên cuối cùng họ sẽ phải quay lại xuống 100 byte để xuất mã gốc của bạn.
- Bạn có thể giả sử máy của bạn có RAM vô hạn và thời gian chạy vô hạn, nhưng bạn không thể giả sử các loại dữ liệu chính xác không giới hạn (như số nguyên) nếu ngôn ngữ của bạn không có chúng. Bạn có thể cho rằng không có giới hạn về độ dài đầu vào mà trình phân tích cú pháp của bạn có thể xử lý.
- Điểm cao nhất sẽ thắng.
Xin lưu ý: có một thách thức hiện tại được gọi là Quit Whining; Bắt đầu Quining cũng liên quan đến lặp đi lặp lại. Tuy nhiên, ngoài việc dựa trên cùng một khái niệm, đây là những loại thử thách hoàn toàn khác nhau. Một cái khác là mã golf thẳng, trong khi cái này là (cố ý!) Thực sự là một vấn đề hải ly bận rộn trong ngụy trang. Các kỹ thuật cần thiết để tạo ra một câu trả lời tốt cho câu hỏi này có thể rất khác so với những gì cần thiết để trả lời câu hỏi khác, và điều này rất nhiều bởi thiết kế.