Tombé par hasard sur cette page qui liste de minuscules programmes en C utilisés comme signatures d’e-mails par des programmeurs fous, ou de génie c’est la même chose. C est un langage de programmation tellement dense qu’il peut en devenir cryptique, ce qui fait qu’il est impossible de deviner ce que font ces programmes sans les lancer. Exemples:
main(){char*i="L0[B0BCA7G0BFACIW0BfRAAB0BCACAFR0[BCAFE0LCCAFR0",j,k=0;for(;*i; *++i==48&&puts(""))do for(j=*i-48>>k&7;j--;)putchar(k+32);while(k^=3);}
fait :
### ##### ## ## ## ## ## ## ## ## ## ### #### ## ###### #### ## ## ## ## ## ## ## ## ## #### ##### ## ## ## ## ## ### ## ## ## ## ####
Celui-ci fait un jeu de pendu dont la solution est le nom de l’auteur !
main(){char s[]=".bg`z`lE)gc`}{hD-|\/OI:retteL>nn",k;long w=32,r,_,y ,i,b,g,p[]={63l<<16,37968,15,32,896,2048,24576,37449,2,12546,3074,19138 ,3586,585,0},t;b=g=r=0;while((b<7)&&(g<65278)){for(_=16;_+10;)putchar(_ -->0?_&7?g>>_&1?s[_]^9:46:w:s[_+w]);while((k=getchar())<65);for(_=15,t= g;_;)if((s[_--]^9|w)==(k|w))g|=2<<_;if(t==g)r|=p[b++];for(y=9,t=0;y--;) for(_=9;_;)putchar(--_?(i=p[y+6]>>24-3*_&7)?r>>t++&1?s[i+15]:w:w:10);}}
>Letter:g—-
| :
| O/
| I
|
|
——
Martijn .ei.in.
celui-ci
int a[1817];main(){int z=5,p=5,q=5,r=5; for(p=80;q+p-80;p-=2*a[p])for(z=9;z--;)q=3&(r=time(0) +r*57)/7,q=q?q-1?q-2?1-p%79?-1:0:p%79-77?1:0:p<1659?79:0:p>158?-79:0,q?!a[p+q*2 ]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817;)printf(q%79?"%c":"%cn","#"[!a[q-1]]);}
fait un labyrinthe dans ce genre :
######### ### ### ####### # # ### ### # # # ####### # # ######### ####### ### # # # # # # # # # # # # # # # # # # # # # # # # ##### ####### ##### # ############# ####### # ####### ########### ####### # # # # # # # # # # # # # # # # # # # # ### # # # ####### # ##### ### ### # ### ### ### ### ### # ### # # ##### # # # # # # # # # # # # # # # # # # # # # # ####### ##### ### # # ##### # # # ####### ### ##### # # ### ######### ### # # # # # # # # # # # # # # # # # # ####### # # # ############### ####### # ##### # # # ####### ##### # # # ### # # # # # # # # # # # # # # # # # # # # ##### ### ##### # ######### ##### # # ####### ### ##### ### # # ### ### ### # # # # # # # # # # # # # # # # # # # ##### # ####### # ##### # # ##### # ### # # ########### ### ### # ### ####### # # # # # # # # # # # # # # # # # # # # # # # # ####### ### # ### ##### # ##### ### ### ### # ### ### # # ##### # # ### # # # # # # # # # # # # # # # # # # # # # # ### ### # ##### # # # ### ### ### ### ####### # ####### ### # # ####### # # # # # # # # # # # # # # # # # # # # ############# ####### # ##### ### ### ######### ##### # # # ##### # ### ##### # # # # # # # # # # # # # # # # # # # # # # # # # # # ##### ##### ### ####### # ##### ##### # # # ##### ### ##### ######### # # #
Une discipline particulière concerne l’ensemble de Mandelbrot :
main(){char*c=" _.+=#n)rezneuM drahnreB(xx.xxx@xxx";int x,t,y;float a, b,d;for(y=0;y<25;y++){for(x=0;x<80;x++){t=b=d=0;do{a=b*b-d*d-2.1+.035*x ;d=2*b*d+.088*y-1.1;b=a;t++;}while(t<32&&b*b+d*d<4);putchar(c[x>79?6:y> 23&&x<28?34-x:t>31?0:t>>4?5:t>>3?4:t>>2?3:t>>;1?2:1]);}}} /*xxx@xxx.xx*/
donne :
_____________.................................++++++++==+++++++++............... ___________...............................+++++++++++++=#====+++++++............ __________............................++++++++++++++++=== ==+++++++++++......... _________..........................++++++++++++++++=### #=#=++++++++++........ ________........................+++++++++++++++++++== ==+++++++++++...... _______......................+++++++++++++=###=== =### ##=== ==++=#=+++..... ______....................++++++++++++++++==# # = ##+++++... _____................+++++++++++++++++++===# #==++++++.. ____...........+++++++++==+++++=++++++====# #===++++.. ____.....++++++++++++++===##===##=======# #=+++++. ____..+++++++++++++++++===# #== #=+++++. ___.+++++++++++++++======# # #=+++++++ ___+++++++=+++======= =+++++++++ ___+++++++=+++======= =+++++++++ ___.+++++++++++++++======# # #=+++++++ ____..+++++++++++++++++===# #== #=+++++. ____.....++++++++++++++===##===##=======# #=+++++. ____...........+++++++++==+++++=++++++====# #===++++.. _____................+++++++++++++++++++===# #==++++++.. ______....................++++++++++++++++==# # = ##+++++... _______......................+++++++++++++=###=== =### ##=== ==++=#=+++..... ________........................+++++++++++++++++++== ==+++++++++++...... _________..........................++++++++++++++++=### #=#=++++++++++........ __________............................++++++++++++++++=== ==+++++++++++......... xxx@xxx.xx(Bernhard Muenzer)..............+++++++++++++=#====+++++++............
on peut même faire plus court :
main(){int c;float t,x,y,b=-2,a=b;for(;b-=a>2?.1/(a=-2):0,b<2;putchar(30+ c),a+=.0503)for(x=y=c=0;++c<90&x*x+y*y<4;y=2*x*y+b,x=t)t=x*x-y*y+a;}
Il y en a encore plein d’autres, mais mon préféré reste cet extraordinaire programme :
int a[52514],b,c=52514,d,e,f=1e4,g,h;main() {for(;b=c-=14;h=printf("%04d",e+d/f)) for(e=d%=f;g=--b*2;d/=g)d=d*b+f*(h?a[b]:f/5),a[b]=d%--g;}
Que fait-il ? Je vous défie de le deviner. La langue au chat est ici !
Une description de l’algorithme utilisé est ici .
4 commentaires sur “Cignatures”
Tombé sur le « ray tracer sur carte de visite » sur http://fabiensanglard.net/rayTracing_back_of_business_card/index.php
juste incroyable !
En écrivant le billet je me suis posé la question du programme qui s’écrit lui-même, mais je ne savais pas que ça existe déjà, encore moins que ça s’appelle un « Quine ». Super ! écris un article si tu veux, mais l’article de la Wikipedia me semble très complet et clair …
J’ai pas saisi l’allusion au « compte goutte » …
Excellent titre de billet !!! Pour le compte goutte, je l’ai connu avant même qu’on en connaissent l’auteur, vers 93… 🙂
Avec un billet pareil, faudrait que moi même j’en fasse un sur les quines…
http://tinyurl.com/2g9w6c