Bildiğimiz gibi, bir quine kendi kaynak kodunu veren bir programdır. Ancak, başka bir program çıkaran ve ilk programı yeniden çıkaran bir program yazmak da mümkündür. Örneğin, Python 2 programı
x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3
çalıştırıldığında aşağıdaki metni çıktılar:
print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""
Bir Python programı olarak çalıştırıldığında, orijinal kod tekrar çıkar. Buna yinelemeli bir quine denir . Orijinal kodu geri almak için iki kez çalıştırmanız gerektiğinden, bunun 2. periyodu olduğunu söylüyoruz . Ancak elbette çok daha yüksek süreler mümkündür.
Zorluğunuz 100 bayt veya daha kısa bir sürede seçtiğiniz dilde olabildiğince uzun bir süre ile yinelenen bir quine yazmaktır . (Yukarıdaki örneğimin, son satırsonu dahil 119 bayt olduğu için bu spesifikasyona uymadığını unutmayın.)
Lütfen aşağıdaki kurallara ve açıklamalara dikkat edin:
- Her zamanki quine kuralları geçerlidir, yani programınız kendi kaynak koduna doğrudan erişmesine izin verecek dil özelliklerini kullanamaz.
- Yinelenen çıkışlar sonunda tam olarak orijinal kodunuza geri dönmelidir ve bunun için bir gösteri veya kanıt eklemeniz gerekir.
- Ayrıca, döngünün neden söylediğiniz kadar uzun olduğunu açıklamanız gerekir. Bunun matematiksel bir kanıt düzeyinde olması gerekmez, ancak dilinizi bilen birine ikna edici olmalıdır. (Bu kural burada çünkü bazı cevapların çok, çok büyük rakamlar içermesini bekliyorum.)
- En azından bu kadar uzun olduğunu kanıtlayabildiğiniz sürece, tam sayıyı vermek yerine "en az 1.000.000 yineleme" gibi bir şey söylemek iyidir. Bu durumda puanınız 1.000.000 olur. Aksi takdirde, puanınız quine döneminizdir.
- 100 bayt limiti yalnızca ilk programınız için geçerlidir - çıktı aldığı programlar daha uzun olabilir, ancak elbette orijinal kodunuzu çıkarmak için sonunda 100 bayta geri dönmeleri gerekecektir.
- Makinenizin sonsuz RAM ve sonsuz çalışma zamanı olduğunu varsayabilirsiniz, ancak dilinizde yoksa sınırsız hassas veri türü (tamsayı gibi) kabul edemezsiniz. Sen edebilirsiniz senin ayrıştırıcı işleyebilir girdi uzunluğuna sınırlama yoktur varsayalım.
- En yüksek puan kazanır.
Lütfen dikkat: Quit Whining adında mevcut bir zorluk var ; Yineleme işlemlerini de içeren Quining'i başlatın. Ancak, aynı konsepte dayanmanın yanı sıra, bunlar tamamen farklı zorluk türleridir. Diğeri düz kod golf, oysa bu (kasıtlı olarak!) Gerçekten kılık değiştirmiş meşgul bir kunduz sorunu. Bu soruya iyi bir cevap üretmek için gerekli tekniklerin diğer soruya cevap vermek için gerekenden çok farklı olması muhtemeldir ve bu tasarım gereğidir.