El reto de hacer un programa que se imprima a si mismo, ha hecho que mucha gente se rompa la cabeza para solventarlo.

De momento, la mejor solución, tan solo utiliza 64 bytes de código fuente en C.

Vlad Taeeroc y Rashit Fakhreyev:
————————————–
a.c (64 bytes)
————————————–
main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}

Podeis ver diferentes variantes del problema en surf.de.uu.net/gnuland/tips+tricks/hacks/.

Mi adaptación, aunque no cumpliría la normativa, al ser dos archivos, el C, y el de cabecera, solamente tiene sentido imprimirse el C, y justo eso es lo que hace, pero en 60 bytes:

Guti:
————————————–
b.c (23 bytes)
————————————–
#include<b>main(){b();}

————————————–
b. (37 bytes)
————————————–
b(){puts("#include<b>main(){b();}");}

Total: 60 bytes.

Por supuesto, la mayoría de soluciones compactas que existen, utilizan prácticas poco recomendables en el código. A saber: invocación de funciones sin prototipo, inclumplimiento de los parámetros retornados, …

Actualizado a lunes 13 de diciembre de 2004

De repente me he acordado de los tiempos del GW-BASIC, así que he hecho mi trivial versión del reto. Ocupa solamente 6 bytes, y debería funcionar con Microsoft GW-BASIC e IBM BASIC. En principio es compatible también con Sinclair Basic.

————————————–
b.bas (6 bytes)
————————————–
1 LIST