Thursday, September 06, 2007

Long live the Quine!

"Is it possible for a program to print its own code?"

I was given this problem by a colleague yesterday and I cannot see the solution...
I think it has to do with fixed points and stuff like that, but after a few attempts I'm completely lost :<

I even looked online for some ideas (which is of course cheating!) and found some implementations, but they are all very complex and difficult to understand.

If you are interested, try for a while, then (if you cannot solve it) take a look at these nice links:



So now I know that these programs do exist... but I still have no clue about how to generate systematically one :(

2 comments:

Teo said...

Bellissimo quello in BrainF***.
Maglietta!

Andrea Valente said...

Forti vero?
In effetti io speravo di trovare una tecnica standard per generare quines in un qualsiasi linguaggio... credo che ci sia, ma ho grossi problemi a vederla :\

Un mio collega dice che usando una definizione ricorsiva si riesce, ma non ho avuto tempo ancora di chiedergli i dettagli.

A me sembra piu' una cosa tipo "punto fisso": ne esistono in tutti i sistemi formali che siano completi. Prendi una funzione iterata: x[t+1] = f( x[t] ).
Concretamente:

x[t+1] = x[t] ^ 2

ad esempio.
Se ci ficchi dentro x[0] = 1, ottieni sempre 1, iterando l'equazione. Quindi 1 e' un punto fisso dell'equazione.
Invece 2 (oppure 1/2) non lo sono e generano una sequenza di valori che diverge (o converge).

Una quine e' praticamente un punto fisso dell'interprete di un linguaggio di programmazione.

E con tutte ste menate, non ho cmq idea di come creare in automatico delle quines :(

Post a Comment