Comme nous le savons, une quine est un programme qui génère son propre code source. Cependant, il est également possible d'écrire un programme qui génère un autre programme différent, qui génère à nouveau le premier programme. Par exemple, le programme Python 2
x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3
, lors de l'exécution, affichera le texte suivant:
print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""
Lorsqu'il est exécuté en tant que programme Python, cela affichera à nouveau le code d'origine. C'est ce qu'on appelle un quine itératif . Parce que vous devez l'exécuter deux fois pour récupérer le code d'origine, nous disons qu'il a la période 2 . Mais bien sûr, des périodes beaucoup plus élevées sont possibles.
Votre défi est d'écrire un quine itératif avec une période aussi longue que possible, en 100 octets ou moins , dans la langue de votre choix. (Notez que mon exemple ci-dessus ne correspond pas à cette spécification, car il fait 119 octets, y compris la nouvelle ligne de fin.)
Veuillez noter les règles et clarifications suivantes:
- Les règles de quine habituelles s'appliquent, c'est-à-dire que votre programme ne peut pas utiliser les fonctionnalités de langage qui lui permettraient d'accéder directement à son propre code source.
- Les sorties itérées doivent finalement revenir en boucle exactement à votre code d'origine, et vous devez inclure une démonstration ou une preuve qu'il le fera.
- Vous devez également inclure une explication de la raison pour laquelle le cycle est aussi long que vous le dites. Cela n'a pas à être au niveau d'une preuve mathématique, mais cela devrait être convaincant pour quelqu'un qui connaît votre langue. (Cette règle est ici parce que je m'attends à ce que certaines des réponses impliquent de très, très grands nombres.)
- C'est bien de dire quelque chose comme "au moins 1 000 000 d'itérations" plutôt que de donner le nombre exact, tant que vous pouvez prouver qu'il est au moins aussi long. Dans ce cas, votre score serait de 1 000 000. Sinon, votre score est la période de votre quine.
- La limite de 100 octets ne s'applique qu'à votre programme initial - les programmes qu'il génère peuvent être plus longs, bien sûr, ils devront éventuellement revenir à 100 octets pour sortir votre code d'origine.
- Vous pouvez supposer que votre machine a une RAM infinie et un temps d'exécution infini, mais vous ne pouvez pas supposer des types de données de précision illimités (tels que des entiers) si votre langue ne les a pas. Vous pouvez supposer qu'il n'y a pas de limite à la longueur d'entrée que votre analyseur peut gérer.
- Le score le plus élevé l'emporte.
Veuillez noter: il existe un défi appelé Quit Whining; Commencez Quining qui implique également l'itération des quines. Cependant, en plus d'être basés sur le même concept, ce sont des types de défis complètement différents. L'autre est le golf de code, alors que celui-ci est (intentionnellement!) Vraiment un problème de castor occupé déguisé. Les techniques nécessaires pour produire une bonne réponse à cette question sont susceptibles d'être très différentes de ce qui est nécessaire pour répondre à l'autre question, et c'est très bien par conception.