2010-12-21 13 views
5

Another SO question menziona un fantastico quine di Yusuke Endoh. Un quine è un programma per computer che produce una copia del proprio codice sorgente come sua unica uscita; questo lo fa con una svolta. A must-see.Come funziona questo superbo quine?

Ma non riesco a capire come funziona. Qualche indicazione?

+0

I commenti su questo post sono un buon inizio. –

+1

+1 per il gioco di parole su "twist". C'è un video su YouTube che mostra di passare da 1 grado alla rotazione completa di 360 gradi [qui] (http://www.youtube.com/watch?v=ktq-22iq-Po) che è divertente da guardare. Nota che l'unico altro testo sfarfallio è in alto a sinistra dove è definito 'v'. – RBerteig

risposta

6

Innanzitutto, si noti che la linea v= e il globo ASCII sono gli unici bit del codice che cambiano su ogni generazione. Questo ci dà un suggerimento su cosa sta realmente accadendo qui.

Il principio di base è che il modello globo è stato codificato con Zlib::Deflate nella prima metà del codice, e la seconda metà si espande con Zlib::Inflate, lo legge, e disegna il globo ASCII all'interno del nuovo codice, con il nuovo v valore. Non c'è niente di particolarmente speciale nei turni a 45 °; il codice disegnerà il globo in qualunque rotazione tu voglia. (In realtà, accetta un argomento della riga di comando che specifica il numero di gradi, se lo desideri.)

Per ulteriori dettagli sull'implementazione, ti consiglio di espandere il codice sorgente e tracciarlo attraverso, con quella comprensione di base di come quine is designed :)