Newsgroup: it.comp.lang.c
Titolo: quinazione

Vi propongo un esercizio divertente!
Scrivere il sorgente di un codice in C che una volta compilato ed 
eseguito restituisce come output il codice sorgente stesso.
E.

 eseguito restituisce come output il codice sorgente stesso.
veeeeeeeeeecchia!!!
"""
#include "stdio.h"
char* s = "#include %cstdio.h%c%c%cchar* s = %c%s%c;%cint main() {%c    printf(s, 34, 34, 10, 10, 34, s, 34, 10, 10, 10, 10);%c}%c";
int main() {
    printf(s, 34, 34, 10, 10, 34, s, 34, 10, 10, 10, 10);
}
"""
$ gcc -Wall -std=c99 -pedantic quine.c -o quine && ./quine | diff quine.c -
$
-- 
Under construction

 
In C: 
http://www.nyx.net/~gthompso/self_c.txt
In C++: 
http://www.nyx.net/~gthompso/self_c++.txt
La pagina dei programi autoriproducenti:
http://www.nyx.net/~gthompso/quine.htm
Rilancio la sfida: 
E` piu' pesante un chilo di paglia od un chilo di ferro?
:D

E` piu' pesante un chilo di paglia od un chilo di ferro?
Di ferro, è ovvio.

     printf(s, 34, 34, 10, 10, 34, s, 34, 10, 10, 10, 10);
infatti! Si noti l'eleganza di usare s sia come stringa di formattazione 
che come parametro... Il sistema di output operator<< del C++ non ha 
questa possibilità, questo è il secondo motivo per cui tale sistema mi 
lascia un po' perplesso.
Il primo motivo è che le stringhe di formattazione sono più comode da 
utilizzare nell'internazionalizzazione del codice.
E.

utilizzare nell'internazionalizzazione del codice.
Cioè?

 eseguito restituisce come output il codice sorgente stesso.
Più seriamente:
http://www.acm.org/classics/sep95/
Luca
-- 
La differenza fra l'intelligenza e la stupidita`?
All'intelligenza c'e` un limite.

 Cioè?
Se in un elenco di stringhe un traduttore si trova
"Premi il tasto '%c' per continuare"
avrà più facilità a tradurla rispetto alle due stringhe separate
"Premi il tasto '"
e
"' per continuare"
E.

"' per continuare"
Bah, che fesseria... m'aspettavo di meglio...

 Bah, che fesseria... m'aspettavo di meglio...
Non so se essere offeso o lusingato...
E.

problema di Quine.
Non vedo cosa c'entri. A parte che la questione dei programmmi che
scrivono il proprio codice è trita e ritrita, non si tratta di punti
di vista avversi, ma semplicemente di capire (non che mi interessi
particolarmente, eh?) che cosa ci sia di "elegante". Tutto qui.
<snip su tutto il resto>

Andrea Laforgia wrote:
 >> Per capire il tuo punto di vista (che mi sembra avverso) potresti
 >> riportare la tua soluzione (o la soluzione che tu preferisci) al
 >> problema di Quine.
 > Non vedo cosa c'entri.
Visto che mi chiedi cosa ci sia di "elegante", significa che tu trovi 
quel codice "non elegante". Dunque ci sono due possibilità:
1. nessuna soluzione al problema di Quine è elegante;
2. c'è una soluzione più elegante al problema di Quine, in tal caso mi 
piacerebbe conoscerla.
 > A parte che la questione dei programmmi che
 > scrivono il proprio codice è trita e ritrita, non si tratta di punti
 > di vista avversi, ma semplicemente di capire (non che mi interessi
 > particolarmente, eh?) che cosa ci sia di "elegante". Tutto qui.
L'istruzione
	printf(s,s);
significa stampa la stringa s formattandola come specificato in s. 
Questo cattura l'idea dell'autoreferenza richiesta dal problema.
Poi, si sa, l'eleganza è questione di gusti, e de gustibus...
E.

 E` piu' pesante un chilo di paglia od un chilo di ferro?
In testa preferisco prendere un chilo di paglia che uno di ferro :)
-- 
blog:  
http://www.akropolix.net/rik0/blogs
 | Uccidete i filosofi,
site:  
http://www.akropolix.net/rik0/
      | tenetevi riso e
forum: 
http://www.akropolix.net/forum/
     | bacchette per voi.