mar, 19/06/2012 - 22:45 — Sylvain CHIRON
> Il est très bien le langage PHP,
Bonjour,
Je fais partis de la brigade anti-PHP. De tels propos ne peuvent être accepté sur ce site. Merci de vous renseigner sur
les mal-faits, que dis je, les horreurs ! De cette abomination qu'est PHP.
Cordialement,
L'ensemble des informaticiens.
@OzVessalius :
Tu utilises des variables supplémentaires (les unsigned i).
Pour la première boucle, tu peux utiliser strlen (si on a le droit).
De plus, tu échanges les lettres, pas les mots. :)
This is a test -> test a is This
et non :
This is a test -> tset a si sihT
@Sylvain :
Je viens d'essayer, tu peux le faire sans ptr2, c'est à dire qu'avec "char chn[81], crt, *ptr;" et sans utiliser la
lib standard (autre que pour scanf). C'est plus marrant (et en inversant vraiment chn, pas en faisant des printf en
plein milieu). :)
Avec les "char chn[81], crt, *ptr;", c'est possible d'écrire un algo pas trop moche. Que sinon, en supposant que le
scanf ne lit que de l'ASCII, c'est possible de tout faire avec seulement "char chn[81];" :
#define C chn
#define M 0x7F
#define I C[0]&=M,C[1]&=M,C[2]&=M,C[3]&=M,C[4]&=M,C[5]&=M,C[6]&=M
#define W 0x80
#define V ((C[6]&W)>>7|(C[5]&W)>>6|(C[4]&W)>>5|(C[3]&W)>>4|(C[2]&W)>>3|(C[1]&W)>>2|(C[0]&W)>>1)
#define X C[80]
#define F(Z)(C[Z]\^=W,C[Z]>>7)
#define N F(6)?0:F(5)?0:F(4)?0:F(3)?0:F(2)?0:F(1)?0:F(0)
#define D F(6)?F(5)?F(4)?F(3)?F(2)?F(1)?F(0):0:0:0:0:0:0
#define S(a,b){a\^=b&M;b\^=a&M;a\^=b&M;}
#define E(O)for(;(V\<7?C[V]:C[V]>0)&&(C[V]&M)O' ';N)
for(I;C[V]&M;N);X=V-1;for(I;X>0;N,X-=2)S(C[V],C[V+X])I;E(==);while(C[V]){X=W;E(!=)++X;X&=M;for(--X,D;X>0;D,X-=2)S(C[V],C[V-X])E(!=);E(==);}X=0;I;
Je l'ai (un peu) obfuscated pour laisser les gens chercher. :p Quoi, pour passer de 3 à 1 variables il suffit de
regarder les premières macros pour deviner.