Come sappiamo, un quine è un programma che genera il proprio codice sorgente. Tuttavia, è anche possibile scrivere un programma che genera un altro programma diverso, che restituisce nuovamente il primo programma. Ad esempio, il programma Python 2
x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3
eseguirà, quando eseguito, il seguente testo:
print """x = '''x = {}
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3'''
print 'print '+'"'*3+x.format("'"*3+x+"'"*3)+'"'*3"""
Quando eseguito come programma Python, questo restituirà nuovamente il codice originale. Questo si chiama quine iterante . Poiché è necessario eseguirlo due volte per ripristinare il codice originale, si dice che ha periodo 2 . Ma ovviamente sono possibili periodi molto più alti.
La tua sfida è quella di scrivere un quine iterante con il più lungo periodo possibile, in 100 byte o meno , nella lingua che preferisci . (Nota che il mio esempio sopra non si adatta a questa specifica, in quanto è di 119 byte, inclusa la nuova riga finale.)
Si prega di notare le seguenti regole e chiarimenti:
- Si applicano le consuete regole di quine, ovvero il tuo programma non può usare le funzionalità del linguaggio che gli consentirebbero di accedere direttamente al proprio codice sorgente.
- Gli output iterati devono infine ritornare esattamente al tuo codice originale e devi includere una dimostrazione o una prova che lo farà.
- Devi anche includere una spiegazione del perché il ciclo è lungo quanto dici. Questo non deve essere al livello di una prova matematica, ma dovrebbe essere convincente per qualcuno che abbia familiarità con la tua lingua. (Questa regola è qui perché mi aspetto che alcune delle risposte coinvolgano numeri molto, molto grandi.)
- Va bene dire qualcosa come "almeno 1.000.000 di iterazioni" piuttosto che fornire il numero esatto, purché si possa dimostrare che è almeno così lungo. In questo caso, il tuo punteggio sarebbe 1.000.000. Altrimenti, il tuo punteggio è il periodo del tuo quine.
- Il limite di 100 byte si applica solo al tuo programma iniziale: i programmi che emette possono essere più lunghi, anche se ovviamente dovranno tornare a 100 byte per produrre il tuo codice originale.
- Puoi presumere che la tua macchina abbia RAM infinita e runtime infinito, ma non puoi assumere tipi di dati di precisione illimitati (come numeri interi) se la tua lingua non li ha. È possibile supporre non c'è limite alla lunghezza di inserire il parser in grado di gestire.
- Vince il punteggio più alto.
Nota: esiste una sfida esistente chiamata Quit Whining; Inizia il quining che comporta anche l'iterazione di quines. Tuttavia, oltre ad essere basati sullo stesso concetto, si tratta di tipi di sfida completamente diversi. L'altro è il golf del codice, mentre questo è (intenzionalmente!) Un vero problema di castori sotto mentite spoglie. Le tecniche necessarie per produrre una buona risposta a questa domanda sono probabilmente molto diverse da quelle necessarie per rispondere all'altra domanda, e questo è molto legato alla progettazione.