예술적인 C코드
The International Obfuscated C Code Contest라는 대회에서 Best Layout상을 받은
Don Yang님의 코드가 정말 예술이더군요! 보고는 감탄 할 수밖에 없었습니다.
실제 코드는 다음과 같습니다.
[CODE]
코드 자체가 예술이죠? 사람얼굴입니다. 그냥 이것이야 만들어주는 프로그램 사용하면 되지 않겠느냐? 싶기도 하겠지만... 문제는 지금부터입니다.
컴파일해서 실행해 보도록 합시다.
첫번째 실행
실행했더니 다음과 같은 결과가 나타납니다.
[CODE]
화면에 보는 바와 같이 일본어로 "A KU"라고 나타나는군요.
그런데 좀 더 자세히 봅시다. 어라? 이것도 소스코드네요? 이걸 한번 컴파일 해볼까요?
두번째 실행
이번에는 일본어로 "SO KU"라고 나오는 군요! 허허... 이것도 그런데 또 C 코드지요? 다시한번 컴파일 해봅시다.
세번째 실행
[CODE]
이번에는 일본어로 "ZAN"이라고 나오는군요. 이것도 다시 컴파일해봅시다.
네번째 실행
[CODE]
다시 "A KU"가 나오네요. 이것이 계속적으로 반복하는 구조를 가집니다. 굉장하지 않습니까? ㅡ.ㅡ 어떻게 이런 발상을 할 수 있는거죠? 허허허...
덧말
나중에 안 사실인데 일본의 애니메이션 바람의 검심에
사이토 하지메가 입에 달고 다니던 말 "악즉참(惡卽斬)"의
일본 발음이 A KU SO KU ZAN 이군요. 그리고 맨 상단의 코드에 나온 얼굴도
사이토 하지메의 얼굴이고요. LSN에서 알려주신 onion님께 감사.. ^_^
링크
The International Obfuscated C Code Contest
http://www.ioccc.org/
일반적으로 프로그래밍할때 따지게 되는게 가독성인데, 그 흐름에 역행하는 이 대회는 그 결과로 산출되는 C코드를 보면 정말이지 코드를 예술의 경지까지 끌어올리고 있음에 혀를 내두를 수 밖에 없다. 한마디로 맛가는 소스코드들! 감상해보자.
[출처]
http://www.oz.or.kr/~spbear/note/wiki/moin.cgi/_bf_b9_bc_fa_c0_fb_c0_ce_20C_c4_da_b5_e5
The International Obfuscated C Code Contest라는 대회에서 Best Layout상을 받은
Don Yang님의 코드가 정말 예술이더군요! 보고는 감탄 할 수밖에 없었습니다.
실제 코드는 다음과 같습니다.
[CODE]
#define/**/X char*d="X0[!4cM,!" "4cK`*!4cJc(!4cHg&!4c$j" "8f'!&~]9e)!'|:d+!)rAc-!*m*" ":d/!4c(b4e0!1r2e2!/t0e4!-y-c6!" "+|,c6!)f$b(h*c6!(d'b(i)d5!(b*a'`&c" ")c5!'b+`&b'c)c4!&b-_$c'd*c3!&a.h'd+" "d1!%a/g'e+e0!%b-g(d.d/!&c*h'd1d-!(d%g)" "d4d+!*l,d7d)!,h-d;c'!.b0c>d%!A`Dc$![7)35E" "!'1cA,,!2kE`*!-s@d(!(k(f//g&!)f.e5'f(!+a+)" "f%2g*!?f5f,!=f-*e/!<d6e1!9e0'f3!6f)-g5!4d*b" "+e6!0f%k)d7!+~^'c7!)z/d-+!'n%a0(d5!%c1a+/d4" "!2)c9e2!9b;e1!8b>e/! 7cAd-!5fAe+!7fBe(!" "8hBd&!:iAd$![7S,Q0!1 bF 7!1b?'_6!1c,8b4" "!2b*a,*d3!2n4f2!${4 f. '!%y4e5!&f%" "d-^-d7!4c+b)d9!4c-a 'd :!/i('`&d" ";!+l'a+d<!)l*b(d=!' m- a &d>!&d'" "`0_&c?!$dAc@!$cBc@!$ b < ^&d$`" ":!$d9_&l++^$!%f3a' n1 _ $ !&" "f/c(o/_%!(f+c)q*c %! * f &d+" "f$s&!-n,d)n(!0i- c- k) ! 3d" "/b0h*!H`7a,![7* i] 5 4 71" "[=ohr&o*t*q*`*d *v *r ; 02" "7*~=h./}tcrsth &t : r 9b" "].,b-725-.t--// #r [ < t8-" "752793? <.~;b ].t--+r / # 53" "7-r[/9~X .v90 <6/<.v;-52/={ k goh" "./}q; u vto hr `.i*$engt$ $ ,b" ";$/ =t ;v; 6 =`it.`;7=` : ,b-" "725 = / o`. .d ;b]`--[/+ 55/ }o" "`.d : - ?5 / }o`.' v/i]q - " "-[; 5 2 =` it . o;53- . " "v96 <7 / =o : d =o" "--/i ]q-- [; h. / = " "i]q--[ ;v 9h ./ < - " "52={cj u c&` i t . o ; " "?4=o:d= o-- / i ]q - " "-[;54={ cj uc& i]q - -" "[;76=i]q[;6 =vsr u.i / ={" "=),BihY_gha ,)\0 " , o [ 3217];int i, r,w,f , b ,x , p;n(){return r <X X X X X 768?d[X(143+ X r++ + *d ) % 768]:r>2659 ? 59: ( x = d [(r++-768)% X 947 + 768] ) ? x^(p?6:0):(p = 34 X X X ) ;}s(){for(x= n (); ( x^ ( p ?6:0))==32;x= n () ) ;return x ; } void/**/main X () { r = p =0;w=sprintf (X X X X X X o ,"char*d="); for ( f=1;f < * d +143;)if(33-( b=d [ f++ X ] ) ){if(b<93){if X(! p ) o [w++]=34;for X(i = 35 + (p?0:1);i<b; i++ ) o [w++]=s();o[ w++ ] =p?s():34;} else X {for(i=92; i<b; i ++)o[w++]= 32;} } else o [w++ ] =10;o [ w]=0 ; puts(o);}[/CODE]
코드 자체가 예술이죠? 사람얼굴입니다. 그냥 이것이야 만들어주는 프로그램 사용하면 되지 않겠느냐? 싶기도 하겠지만... 문제는 지금부터입니다.
컴파일해서 실행해 보도록 합시다.
첫번째 실행
실행했더니 다음과 같은 결과가 나타납니다.
[CODE]
[spbear@www art]$ gcc dhyang.c
dhyang.c: In function `main':
dhyang.c:50: warning: return type of `main' is not `int'
[spbear@www art]$ ./a.out
char*d=")35E!'1cA,,!""2kE`*!-s@d(!(k(f//g&!)f.e5'f(!+a+)f%2g*!?f5f,!=f-*e/!<d"
"6e1!9e0'f3!6f)-g" "5!4d*b+e6!0f%k)d7!+~^'c7!)z/d-+!'n%a0(d5!""%c1a+/d4"
"!2)c9e2!9b;e1!8b" ">e/!7cAd-!5fAe+!7fBe(!8hBd&!:iAd$![7S,Q" "0!1bF7"
"!1b?'_6!1c,8b4!2" "b*a,*d3!2n4f2!${4f.'!%y4e5!&f%d-^-d7!4" "c+b)"
"d9!4c-a'd:!/i('`" "&d;!+l'a+d<!)l*b(d=!'m-a&d>!&d'`0_&c" "?!"
"$dAc@!$cBc@!$b<^" "" "&d$`:!$d9_&l++^$!%f3" "a'n"
"1_" "$!&f/c(o/_%!(f+c)q*c%" "!*f&d"
"+f$" "s&!-n,d)n(!0i-c-k)!3d/" "b0h*!H`"
"7a,![" "7X0[!4cM,!4cK`*!4cJc(!4cHg&!4" "c$j8f'!&~"
"]9e)!'" "|:d+!)""rAc-!*m*:d/!4c(b4e0!1r" "2e2!/t0e4!-"
"y-c6!+|,c6!)f$b(" "h*c6" "!(d'b(i)d5!(b*a'" "`&c)c5!'b+`&"
"b'c)c4!&b-_$c" "'d*c3!&a.h'd+d" "1!%a/g'e+e0!%b"
"-g(d.d/!&c*" "h'd1d-!(d%g)" "d4d+!*l,d7d)!,h-"
"d;c'!.b0c" ">d%!A`Dc$" "![7*i]5471[=ohr&o*"
"t*q*`*d" "*v*r;027" "*~=h./}tcrsth&t:r9"
"b].,b" "" "-725" "-.t--/" "/#r[<t8-752793?<.~"
";b]." "t--" "+r/#" "537-r" "[/9~X.v90<6/<.v;-"
"52/=" "{kgoh." "/}q" ";u" "vtohr" "`.i*$engt$$,b;$/="
"t;v" ";6=`it." "`;" "7=`" ":,b-7" "25=/o`..d;b]`--["
"/+" "55/}o`.d:" "" "-?5" "/}o`.'" "v/i]q--[;52=`it"
".o" ";53-.v96<7" "/=o" ":d=o--/" "i]q--[;h./=i]"
"q" "--[;v9h./<-" "52=" "{cjuc&`" "it.o;?4=o:d="
"o" "--/i]q--[" ";54=" "{cjuc&i]q-" "-[;76=i]q[;"
"6=" "vsru.i" "/={" "=),BihY_gha,)" "",o[3217];
int i, r,w ,f,b,p, t=641,x;n(){return r<t?d[(*
d+143+(r ++))%t]:r> +1341?59:(x=d[(r++-t) %351+t]
)?x^(p?6:0 ):(p=+34);} main(){w=sprintf(o,"char" "*d="
);r=p=0;for( f=1;f<*d+143;) if((b=d[f++])-33){if(b<+93){ if(
!p)o[w++]=34;for(i=35+(p?0:1);i <b;i++)o[w++]=n();o[w++]=p?n():+34 ;}
else for(i=92;i<b;i++)o[w++]=32;}else o[w++]=10;o[w]=0;puts(o);};/*Don_Yang*/;
[spbear@www art]$
[/CODE]화면에 보는 바와 같이 일본어로 "A KU"라고 나타나는군요.
그런데 좀 더 자세히 봅시다. 어라? 이것도 소스코드네요? 이걸 한번 컴파일 해볼까요?
두번째 실행
[CODE] [spbear@www art]$ ./a.out > output1.c [spbear@www art]$ gcc output1.c [spbear@www art]$ ./a.out char*d="S,Q0!1bF7!1b?'_""6!1c,8b4!2b*a,*d3""!2n4f2!${4f.'!%y4e5!&f%d-^-d7!4c+" "b)d""9!4c-a'd:!/i(" "'`&d;!+l'a+d<!)l*b(d=!'m-a&d>""!&d'`0_&""c?!$dAc@" "!$cBc@!$b<^&d$" "`:!$d9_&l++^$!%f3a'n1_$!&f/c(o/_%" "!(f+c)" "q*c%!*f&d" "+f$s&!-n,d)n(!0i-c-k)!3d/b0h" "*!H`" "7a,!" "[7X0" "[!4cM,!4cK`""*!4cJc(!4cH" "g&" "!4c$j" "8f'!&~]9e)" "!'|:d+!)rAc-!*m*:""d/!" "4c(b" "4e0!1r2" "e2!/t0e""4!-y-" "c""6!+|,c6!)f$b(h" "*c6!(d" "'b(i)d5!(b*a'`&c)c5!'b+`&b'" "c)c4!&b-_$c'd*c3!" "&a.h'd+d" "1!%a/g'e+e0!%b-g(d.d/!&c*" "h'd1d-!(d""%g)d4d" "+!*l,d7d)!," "h-d;c'!.b0c>d%!A`Dc$![7)" "35E!'1cA,,!2kE`*!-" "s@d(!(k(f//g&" "!)f.e5'f(!+a+)f%2g*!?" "f5f,!=f-*e/!""<d6" "e1!9e0'f3!6f)-g" "5!4d*b+e6!0f%k)d7!" "+~^'c""7!)z/d-+!" "'n%a0(d5!%c1a+/d4" "!2)c9e2!9b;e1!8b" ">e/!7c" "Ad-!5fA" "e+!7fBe(!8hBd&!:iA" "d$![7*i]5471" "[" "=ohr&" "o*t*q*`*d*v*r;027*~" "=h./}tc" "rst" "h&t:r9b].,b-725-.t-" "-//#r" "[<t8-752793" "?<.~;b].t""--+r/#5" "37-" "r" "[/9~X.v90<6/""<.v;" "-52/={kgoh./}q;uv" "t" "ohr`.i*$engt$" "$,b;$/=""t;v;6=`it.`" ";7=`:,b-725=/o`." ".d;b]`--[/+55/""}o`.d" ":-?5/}o`.'v/i]q--[;52" "=`it.o;53-.v96" "<7/=o:d=o--/i]q--[;h." "/=i]q--[;v9h./<-52={cju" "c&`it.o;?4=o:" "d=o--/i]q--[;54={cju" "c&i]q--[;76=i]q[;6=vsru.i/" "={=),BihY_g" "ha,)",o[3217];int i, r,w,f,b,p,t=641,x;n(){return r< t?d[(*d+143 +(r++))%t]:r>+1341? 59:(x=d[(r++-t)%351+t])?x^(p?6: 0):(p=+34 );}main(){w=sprintf(o ,"char""*d=");r=p=0;for(f=1;f<*d +143;) if((b=d[f++])-33){if(b <+93){if(!p)o[w++]=34;for(i=35+( p?0: 1);i<b;i++)o[w++]=n();o[ w++]=p?n():+34;}else for(i=92;i <b ;i++)o[w++]=32;}else o[w++]=10;o[w]=0;puts(o);};/*Don_Yang*/;;;;;;;;;;;;;;;;;; [spbear@www art]$ [/CODE]
이번에는 일본어로 "SO KU"라고 나오는 군요! 허허... 이것도 그런데 또 C 코드지요? 다시한번 컴파일 해봅시다.
세번째 실행
[CODE]
[spbear@www art]$ ./a.out > output2.c [spbear@www art]$ gcc output2.c [spbear@www art]$ ./a.out char*d="X0[!4cM,""!4cK`*!4cJc(!4cHg&!4c$j8f'!&~]9e)!'|:d+!)rAc-""!*m*:d/!4c(b" "4e0!1r2e2!/t0" "e4!-y-c6!+|,c6!)f$b(h*c6!(d'b(i)d5""!(b*a'`&c)c5!'b+`&b" "'c)c4!&b-_$c'" "d*c3!&a.h'd+d1!%a/g'e+e0!%b""-g(" "d.d/!&c*h'd1d-!(d%" "g)d4d+!*l,d7d" ")!,h-d;c""'!.b0c>d%!A`Dc$![7)3" "5E!'1cA,,!2kE`*!" "-s@d(!(k(f//g&" "!)f.e5" "'f(!+a+)""f%2g*!" "?f5f,!=f-*e/!<d" "6e1!9e0'f3!6f)" "-g5!4d*b+e6!0f%k" ")d7!+~^'c7!)z/" "" "d-+!'n%a0(d5!%c1" "a+/d4!2)c9""e2!" "9" "b;e1!8b>e/!7cAd-" "!5fAe+!7fBe(!8hBd" "&!" ":" "iAd$![7S," "Q0!1bF7!1" "b?'_6!1c,8b4!2b*a,*" "d3!2n4f2!${4f.'!" "%y4e5!&" "f%d-^" "-d7!4c+b)d9!4c-a'd:!/" "i('`&d;!+l'a+d<!" ")l*b(d=!'" "m-a" "&d>!&d'`0_&c?!$dAc@!$c" "Bc@!$b<^&d$" "`:!$""d9_" "&l" "++^$!%f3a'n1_$!&f/c(o/_" "%!(f+c)" "q*c" "%!*f&d+" "f$s&!-n,d)n(!0i-c-k)!3d/" "b0h*!" "H`7a,!" "[7*i" "]5471[=ohr&o*t*q*`*d*v*r;" "027" "*~=h./}tc" "rs" "th&t:r9b].,b-725-.t--//#r[" "<t" "8-7" "52793?<.~;b]" ".t" "--+r/#537-r[/9~X.v90<6/<.v;" "" "-52/={kgoh./}q;uvtohr`.i*$eng" "t$$,b;$/=t;v;6=`it.`;7=`:,b-" "" "725=/o`..d;b]`--[/+55/}o`.d:-?" "5/}o`.'v/i]q--[;52=`it.o;53-" "" ".v96<7/=o:d=o--/i]q--[;h" "./" "" "=i]q--[;v9h./<-52={cju" "" "c&`it.o;?4=o:d=o--/i]" "q-" "-[;54={""cjuc&i]" "" "q" "--[;76=i]q[;6=v" "sru" ".i/={=),BihY_" "" "gh" "a,)",o[3217] ;int i ,r,w,f,b,p,t= 641 ,x;n() {return r <t?d[(* d+143+(r ++) )%t]:r>+ 1341 ?59:(x=d[ (r ++-t )%351+t])?x ^(p?6:0):( p=+34); }main( ){w=sprintf(o, "char""*d=" );r=p=0;for (f=1;f< *d+143;)if((b=d[f ++])-33){if(b <+93){if(!p)o[ w++]=34; for(i=35+(p?0:1);i<b;i++)o[w++]=n();o[ w++]=p?n():+34;}else for(i=92;i <b;i++)o[w++]=32;}else o[w++]=10;o[w]=0;puts(o);};/*Don_Yang*/;;;;;;;;;;;;;;;; [spbear@www art]$[/CODE]
이번에는 일본어로 "ZAN"이라고 나오는군요. 이것도 다시 컴파일해봅시다.
네번째 실행
[CODE]
[spbear@www art]$ ./a.out > output3.c [spbear@www art]$ gcc output3.c [spbear@www art]$ ./a.out char*d=")35E!'1cA,,!""2kE`*!-s@d(!(k(f//g&!)f.e5'f(!+a+)f%2g*!?f5f,!=f-*e/!<d" "6e1!9e0'f3!6f)-g" "5!4d*b+e6!0f%k)d7!+~^'c7!)z/d-+!'n%a0(d5!""%c1a+/d4" "!2)c9e2!9b;e1!8b" ">e/!7cAd-!5fAe+!7fBe(!8hBd&!:iAd$![7S,Q" "0!1bF7" "!1b?'_6!1c,8b4!2" "b*a,*d3!2n4f2!${4f.'!%y4e5!&f%d-^-d7!4" "c+b)" "d9!4c-a'd:!/i('`" "&d;!+l'a+d<!)l*b(d=!'m-a&d>!&d'`0_&c" "?!" "$dAc@!$cBc@!$b<^" "" "&d$`:!$d9_&l++^$!%f3" "a'n" "1_" "$!&f/c(o/_%!(f+c)q*c%" "!*f&d" "+f$" "s&!-n,d)n(!0i-c-k)!3d/" "b0h*!H`" "7a,![" "7X0[!4cM,!4cK`*!4cJc(!4cHg&!4" "c$j8f'!&~" "]9e)!'" "|:d+!)""rAc-!*m*:d/!4c(b4e0!1r" "2e2!/t0e4!-" "y-c6!+|,c6!)f$b(" "h*c6" "!(d'b(i)d5!(b*a'" "`&c)c5!'b+`&" "b'c)c4!&b-_$c" "'d*c3!&a.h'd+d" "1!%a/g'e+e0!%b" "-g(d.d/!&c*" "h'd1d-!(d%g)" "d4d+!*l,d7d)!,h-" "d;c'!.b0c" ">d%!A`Dc$" "![7*i]5471[=ohr&o*" "t*q*`*d" "*v*r;027" "*~=h./}tcrsth&t:r9" "b].,b" "" "-725" "-.t--/" "/#r[<t8-752793?<.~" ";b]." "t--" "+r/#" "537-r" "[/9~X.v90<6/<.v;-" "52/=" "{kgoh." "/}q" ";u" "vtohr" "`.i*$engt$$,b;$/=" "t;v" ";6=`it." "`;" "7=`" ":,b-7" "25=/o`..d;b]`--[" "/+" "55/}o`.d:" "" "-?5" "/}o`.'" "v/i]q--[;52=`it" ".o" ";53-.v96<7" "/=o" ":d=o--/" "i]q--[;h./=i]" "q" "--[;v9h./<-" "52=" "{cjuc&`" "it.o;?4=o:d=" "o" "--/i]q--[" ";54=" "{cjuc&i]q-" "-[;76=i]q[;" "6=" "vsru.i" "/={" "=),BihY_gha,)" "",o[3217]; int i, r,w ,f,b,p, t=641,x;n(){return r<t?d[(* d+143+(r ++))%t]:r> +1341?59:(x=d[(r++-t) %351+t] )?x^(p?6:0 ):(p=+34);} main(){w=sprintf(o,"char" "*d=" );r=p=0;for( f=1;f<*d+143;) if((b=d[f++])-33){if(b<+93){ if( !p)o[w++]=34;for(i=35+(p?0:1);i <b;i++)o[w++]=n();o[w++]=p?n():+34 ;} else for(i=92;i<b;i++)o[w++]=32;}else o[w++]=10;o[w]=0;puts(o);};/*Don_Yang*/; [spbear@www art]$[/CODE]
다시 "A KU"가 나오네요. 이것이 계속적으로 반복하는 구조를 가집니다. 굉장하지 않습니까? ㅡ.ㅡ 어떻게 이런 발상을 할 수 있는거죠? 허허허...
덧말
나중에 안 사실인데 일본의 애니메이션 바람의 검심에
사이토 하지메가 입에 달고 다니던 말 "악즉참(惡卽斬)"의
일본 발음이 A KU SO KU ZAN 이군요. 그리고 맨 상단의 코드에 나온 얼굴도
사이토 하지메의 얼굴이고요. LSN에서 알려주신 onion님께 감사.. ^_^
링크
The International Obfuscated C Code Contest
http://www.ioccc.org/
일반적으로 프로그래밍할때 따지게 되는게 가독성인데, 그 흐름에 역행하는 이 대회는 그 결과로 산출되는 C코드를 보면 정말이지 코드를 예술의 경지까지 끌어올리고 있음에 혀를 내두를 수 밖에 없다. 한마디로 맛가는 소스코드들! 감상해보자.
[출처]
http://www.oz.or.kr/~spbear/note/wiki/moin.cgi/_bf_b9_bc_fa_c0_fb_c0_ce_20C_c4_da_b5_e5
반응형
'불펌' 카테고리의 다른 글
연예인 지옥 (0) | 2003.11.08 |
---|---|
♡아버지의 사랑♡ (1) | 2003.10.09 |
어느 신혼 부부의 다모 시청기 (0) | 2003.08.28 |
찡한 그림 (0) | 2003.08.12 |
스타크래프트 해설자들.. 유머 (2) | 2003.08.08 |