Seperti kita ketahui, quine adalah program yang menampilkan kode sumbernya sendiri. Namun, mungkin juga untuk menulis program yang menghasilkan program lain yang berbeda, yang menghasilkan lagi program pertama. Misalnya, program Python 2
x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3
akan, ketika dijalankan, menampilkan teks berikut:
print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""
Ketika dijalankan sebagai program Python, ini akan menampilkan kode asli lagi. Ini disebut quine iterating . Karena Anda harus menjalankannya dua kali untuk mendapatkan kode asli kembali, kami katakan itu memiliki periode 2 . Tapi tentu saja, periode yang jauh lebih tinggi dimungkinkan.
Tantangan Anda adalah menulis quine iterating dengan periode yang Anda bisa, dalam 100 byte atau kurang , dalam bahasa pilihan Anda. (Perhatikan bahwa contoh saya di atas tidak sesuai dengan spesifikasi ini, karena 119 byte, termasuk baris tambahan.)
Harap perhatikan aturan dan klarifikasi berikut:
- Aturan quine yang biasa berlaku, yaitu program Anda tidak dapat menggunakan fitur bahasa yang akan membiarkannya mengakses kode sumbernya sendiri secara langsung.
- Keluaran yang di-iterasi akhirnya harus kembali ke kode asli Anda, dan Anda harus menyertakan demonstrasi atau bukti bahwa itu akan.
- Anda juga harus memasukkan penjelasan mengapa siklus itu selama Anda mengatakannya. Ini tidak harus pada tingkat bukti matematika, tetapi harus meyakinkan seseorang yang terbiasa dengan bahasa Anda. (Aturan ini ada di sini karena saya berharap beberapa jawaban melibatkan jumlah yang sangat, sangat besar.)
- Tidak apa-apa untuk mengatakan sesuatu seperti "setidaknya 1.000.000 iterasi" daripada memberikan angka pastinya, selama Anda dapat membuktikan bahwa itu setidaknya selama itu. Dalam hal ini, skor Anda adalah 1.000.000. Kalau tidak, skor Anda adalah periode quine Anda.
- Batas 100 byte hanya berlaku untuk program awal Anda - program yang dihasilkannya bisa lebih lama, meskipun tentu saja mereka akhirnya harus kembali ke 100 byte untuk mengeluarkan kode asli Anda.
- Anda dapat mengasumsikan mesin Anda memiliki RAM tak terbatas dan runtime tak terbatas, tetapi Anda tidak dapat mengasumsikan tipe data presisi tak terbatas (seperti bilangan bulat) jika bahasa Anda tidak memilikinya. Anda dapat mengasumsikan tidak ada batasan panjang input yang dapat ditangani parser Anda.
- Skor tertinggi menang.
Harap dicatat: ada tantangan yang disebut Quit Whining; Mulai Quining yang juga melibatkan queri iterasi. Namun, selain didasarkan pada konsep yang sama, ini adalah jenis tantangan yang sama sekali berbeda. Yang lain adalah kode lurus golf, sedangkan yang satu ini (sengaja!) Benar-benar masalah berang-berang yang disamarkan. Teknik yang diperlukan untuk menghasilkan jawaban yang baik untuk pertanyaan ini cenderung sangat berbeda dari apa yang dibutuhkan untuk menjawab pertanyaan lain, dan ini sangat banyak dengan desain.