Questo ouroboros di quine a 128 lingue (un programma che genera un programma in un'altra lingua, che genera un programma in un'altra lingua (125 lingue dopo), che genera il programma originale) è piuttosto impressionante. Sfortunatamente, ha un numero statico di iterazioni.
Scrivere un programma che emette un programma (non necessariamente in un'altra lingua, ma può essere), che emette un programma, che emette un programma, ecc., Che dopo n iterazioni, emette il programma originale per la prima volta (cioè nessun intermedio programma dovrebbe essere lo stesso dell'originale, perché altrimenti un quine che ignora il suo input funzionerebbe), dove n è un intero non negativo fornito come input. L'input non può essere solo un numero nel codice sorgente originale (es. Mettere x = <the value of n>
all'inizio del programma), dovrebbe essere uno dei seguenti:
- Passato come argomento della riga di comando
- Leggi da input standard
- Passato come argomento a una funzione, che restituisce / genera il nuovo programma.
Per le fasi intermedie in ouroboros, il tuo programma può essere un programma perfettamente funzionante o una funzione senza argomenti, che, quando chiamato, restituirà / emetterà il successivo.
Potresti non leggere dal file sorgente stesso o utilizzare qualsiasi builtin simile a un quine (non credo che ce ne siano alcuni che lo farebbero, ma potrebbe esserci)
Per essere chiari, se n = 0
, il programma dovrebbe generare il proprio codice sorgente.
Se n = 1
, il programma dovrebbe generare un programma diverso, che genera il codice sorgente originale.
E così via...
Vince il minor numero di byte!
Modificare:
Avrei dovuto scrivere "Per le fasi intermedie dei nostrioboros, il tuo programma può essere un programma perfettamente funzionante senza input o una funzione senza argomenti". Se il tuo programma genera quello successivo nella catena, quindi attende l'input, va bene, ma il tuo programma non dovrebbe aver bisogno del valore originale di n.
getInput()
venga usato senza alcun input fornito. Oppure possiamo dire di inserire qualcosa di casuale che non viene utilizzato per le iterazioni successive, per evitare errori per getInput()
? Aka è valida la risposta attuale di Python?
n
, produrre un programma che sia il "programma iniziale" di un quorino di n
iterazioni e che la nostra risposta non dovrebbe essere considerata come una delle n
iterazioni. È corretto?