Wie wir wissen, ist ein Quine ein Programm, das seinen eigenen Quellcode ausgibt. Es ist jedoch auch möglich, ein Programm zu schreiben, das ein anderes, anderes Programm ausgibt, das das erste Programm erneut ausgibt. Zum Beispiel das Python 2-Programm
x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3
gibt beim Ausführen den folgenden Text aus:
print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""
Wenn es als Python-Programm ausgeführt wird, wird der ursprüngliche Code erneut ausgegeben. Dies wird als iterierende Quine bezeichnet . Da Sie es zweimal ausführen müssen, um den ursprünglichen Code zurückzugewinnen, haben wir die Periode 2 . Aber natürlich sind viel höhere Perioden möglich.
Ihre Herausforderung besteht darin, eine iterierende Quine mit einem möglichst langen Zeitraum in maximal 100 Byte in der Sprache Ihrer Wahl zu schreiben . (Beachten Sie, dass mein Beispiel oben nicht zu dieser Spezifikation passt, da es 119 Byte enthält, einschließlich der nachfolgenden Zeilenumbruch.)
Bitte beachten Sie die folgenden Regeln und Erläuterungen:
- Es gelten die üblichen Quine-Regeln, dh Ihr Programm kann keine Sprachfunktionen verwenden, mit denen es direkt auf seinen eigenen Quellcode zugreifen kann.
- Die iterierten Ausgaben müssen schließlich zu genau Ihrem ursprünglichen Code zurückkehren, und Sie müssen eine Demonstration oder einen Beweis dafür beifügen.
- Sie müssen auch eine Erklärung hinzufügen, warum der Zyklus so lang ist, wie Sie es sagen. Dies muss nicht unbedingt ein mathematischer Beweis sein, sondern sollte jemanden überzeugen, der mit Ihrer Sprache vertraut ist. (Diese Regel ist hier, weil ich erwarte, dass einige der Antworten sehr, sehr große Zahlen enthalten.)
- Es ist in Ordnung, etwas wie "mindestens 1.000.000 Iterationen" zu sagen, anstatt die genaue Anzahl anzugeben, solange Sie nachweisen können, dass es mindestens so lang ist. In diesem Fall wäre Ihre Punktzahl 1.000.000. Andernfalls ist Ihre Punktzahl die Periode Ihrer Quine.
- Das 100-Byte-Limit gilt nur für Ihr ursprüngliches Programm - die von ihm ausgegebenen Programme können länger sein, obwohl sie natürlich irgendwann wieder auf 100 Byte reduziert werden müssen, um Ihren ursprünglichen Code auszugeben.
- Sie können davon ausgehen, dass Ihr Computer über unendlich viel RAM und unendlich viel Laufzeit verfügt. Sie können jedoch keine Datentypen mit unbegrenzter Genauigkeit (z. B. Ganzzahlen) annehmen, wenn Ihre Sprache diese nicht hat. Sie können davon ausgehen, dass die Länge der Eingabe, die Ihr Parser verarbeiten kann, unbegrenzt ist.
- Die höchste Punktzahl gewinnt.
Bitte beachten Sie: Es gibt eine Herausforderung namens Quit Whining. Starten Sie Quining , bei dem auch Quines iteriert werden. Abgesehen davon, dass sie auf demselben Konzept basieren, handelt es sich jedoch um völlig unterschiedliche Arten von Herausforderungen. Der andere ist Straight-Up-Code-Golf, während dieser (absichtlich!) Wirklich ein geschäftiges Biberproblem in der Verkleidung ist. Die Techniken, die erforderlich sind, um eine gute Antwort auf diese Frage zu erhalten, unterscheiden sich wahrscheinlich stark von denen, die zur Beantwortung der anderen Frage erforderlich sind, und dies ist sehr beabsichtigt.