C mágia

Az alábbiakban néhány furcsa C forráskódot találsz, melyekről első ránézésre nem nyilvánvaló, mit csinálnak (de mindegyik csinál valamit). Ha úgy érzed, hogy értesz a C-hez (esetleg jó jegyet szereztél belőle), itt az idő, hogy próbára tedd fejben fordító képességedet. Bemelegítésképpen következzen egy olyan kód, ami mind C-ben, mind Pascal-ban lefordul:

const struct { /* }=0;
begin
  writeln('Hello, Pascal!');
end.

*/ int x; } y={0};

#include <stdio.h>

main(int argc, char **argv) {
  printf("Hello, C!\n");
  return 0;
}

Ha már így belejöttél, fejtsd meg, mit csinál az alábbi program:

#include <stdio.h>

main(__,_) {
  return (__>=_-_)&&main(-1997*main(-1996,-1995)<<main(-__<<2,-__<<2),-2)||(_<
         __-__)&&((__==_)&&(!main(-2,-__)||printf("%d\n",-__))||(main((__+=_)/
         2,_)-_+main(__-_,__/2-!(_-_))))||(__*__>_||_%__--&&main(__,_));
}

Jöjjön egy újabb gyöngyszem, melynek gyakorlati haszna is van: az stdin-ről beolvas valamit, átalakítja, és kiírja az stdout-ra. De vajon miből áll az átalakítás?

#if defined __MSDOS__
  #include <io.h>
  #define write _write
  #define read _read
#endif
#define lII (Il||(Il=((ll=read(Il,&II,1<<1<<11))>Il?ll:Il)))*++*(II-Il--+ll)  
char II[1<<11<<1],l[1<<1<<11];int lI=1>>11>>1,Il=1>>1>>11,ll=1>>11>>1;int main
(int IlI,int I){if(IlI<0)return((!I||lI==1<<11<<1)&&(lI=write(1,&l,lI)&&0))+I+
(I&&(l[lI++]=I-1));else while(main(-1,(I=lII)==1+11+2?lII:((I---11)||main(-1,
14))+I));}

Az előbbiek saját alkotások voltak. Végezetül következzen egy sokkal szebb és érdekesebb rejtvény (származási hely: C forrás, hasonlóak):

main(t,_,a)char*a;{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,main(-86,0,a
+1)+a)):1,t<_?main(t+1,_,a):3,main(-94,-27+t,a)&&t==2?_<13?main(2,_+1,"%s"
" %d %d\n"):9:16:t<0?t<-72?main(_,t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{"
"*+,/w{%+,/w#q#n+,/#{l,+,/n{n+,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'"
"K:'+}e#';dq#'l q#'+d'K#!/+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl"
"]'/+#n';d}rw' i;# ){nl]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w"
"#q#n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c ;;"
"{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;#'rdq#w! nr'/ ') }+}{rl#'{n' ')"
"# }'+}##(!!/" ):t<-50?_==*a?putchar(31[a]):main(-65,_,a+1):main((*a=='/')
+t,_,a+1):0<t?main(2,2,"%s"):*a=='/'||main(0,main(-61,*a,"!ek;dc i@bK'(q)"
"-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}

1999. szeptember 22.
Budaörs, Magyarország.


Ez a lap pts oldalai közül való.