Samedi 22 Octobre 2011
Décodage IOCCC (bis)
Voila, c'etait l'annif de Zerosquare hier, je lui ai fait un petit cadeau.

Mais a l'inverse de lui l'algorithme est simple, c'est juste la présentation qui est tordu.

Arriverez vous retrouver ce que ça fait ?

Plus apres la suite


Voici le code source :

#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 
#include <inttypes.h> 
#define   h main  
#define   a uint16_t 
#define   p uint8_t 
#define  _p N(G,3, 
#define   y return 
#define   b 25 
#define   i sizeof 
#define   r char 
#define   t fopen 
#define  _h fwrite 
#define   d "happy_birthday_zerosquare" 
#define  _a N(C,4, 
#define  _y N(A,4, 
#define   z for 
#define   e int16_t 
#define  _r = 0 
#define   o & 0xFF 
#define   s >> 8 
#define   q uint32_t 
#define   u -(12*4) 
#define __a 4064 
#define __r double 
#define  _e (__a * (_m(x) o)) 
p happy_birthday[] = {     
0x52,       0x49,         0x46,         0x46, 0x00,         0x00, 0xA5,         0xB6,       0x57, 
0x41,       0x56,   0x45,       0x66,   0x6D, 0x74, 0x20,   0x10, 0x00, 0x00,   0x00,       0x01, 
0x00, 0x02, 0x00,   0x44, 0xAC, 0x00,   0x00, 0x10,         0xB1, 0x02,               0x00, 
0x04,       0x00,   0x10,       0x00,   0x64,               0x61,                     0x74,               
/**/        /**/    /**/        /**/    /**/                /**/                      0x61}; 
#define N(_n,_o,_d) (((12*_o+_n)<<8)|_d) 
enum{cp=3,dc=1,n=4,bb=8,A _r,Ad,B,C,Cd,D,Dd,E,F,Fd,G,Gd}; const a _t[] = { _p cp),_p dc),_y n),_p n), 
_a n),N(B,4,bb),_p cp),_p dc),_y n),_p n),N(D,4,cp), _a bb), _p cp), _p dc), N(G,4,n), N(E,4,n), 
_a n), N(B,4,n), _y n), N(F,4,cp),N(F,4,dc),N(E,4,n), _a n), N(D,4,cp), N(C,4,bb),}; a _m(a n) 
{ y _t[n%b]; } __r k(__r n) { y sin(n); } int h(){ q __l _r; e _v; __r _o; q *__e = (q*)(happy_birthday + 4); 
FILE *f = t(d, "wb"); a x; z(x _r;x<50;x++) { __l += _m(x) o; } __l = __l* __a * 4;  *__e = (__l+24); 
_h(happy_birthday, 1, i(happy_birthday), f); _h(&__l, 1, i(__l), f); z(x _r;x<50;x++){q m; 
z(m _r;m<(__a * (_m(x) o));m++){ _o = k(m * 0.062 * pow(2,((((_m(x))s)o)u)/12.0))*(1<<14);_o*=(m<400)?(__r)(m*0.0022):1.0;  
_o *= (m >(_e-400))?(_e-m)*0.0022:1;_v = (q) _o; _h(&_v, 1, i(_v), f); _h(&_v, 1, i(_v), f); } } fclose(f); y 0; }


Pour paraphraser Zerosquare:

Et maintenant, essayez de répondre aux questions suivantes (avant de lancer le programme, évidemment, sinon il n'y a pas de challenge )
1) Ce programme genere un fichier. Quel est son nom?
2) plus précisément, que constitue l'ensemble des données générées ?
3) d'où proviennent-elles à l'origine ? (si vous trouvez la réponse à celle-là juste en lisant le code, vous êtes très, très fort )
4) comment tout ce fatras fonctionne-t-il ?
5) A quoi sert happy_birtday ? C'est joli ok, mais ça doit bien avoir une utilité!
Posté à
02:21
 par Godzil - | Autres

2. Godzil à 19:01 24/10/2011 -
Bien sur ^^

(c'est aussi illisible que le code de Zerosquare une fois que tu sais ce que ça fait vu que c'est quasiment le meme code ;) )

1. Zeph à 13:40 23/10/2011 -
C'est plus facile que celui de Zerosquare : un coup de préprocesseur puis une réindentation et le code devient lisible, aux noms de variable près :)

Pseudo :

Adresse mail : (optionnel)

Site web : (optionnel)

Veuillez entrer la somme de cinq et cinq :
Message :


[ img
img
 RSS  - ©yNBlogs 2004

Login : - Mot de passe :