또 다른 C 코드를 만드는 C 코드 기억나시는분 있나요?

MasterQ의 이미지

아주 오래전에 이곳 게시판에서 본것이라 정확히 어떤 프로그램이었는지 기억하지 못하지만

대충 이랬던것 같습니다.

C로 짜여진 프로그램인데, compile하고 실행을 하면 어떤 일본 글자를 ascii art형식으로 출력을 하는데

그 output 자체가 또 하나의 source code였고, 또 이것을 복사해서 컴파일해서 실행을 하면 또 다른

일본 글자를 출력했는데, 이것 또한 또 다른 C source code라서 또 출력할수 있었고 결국은 맨 처음 글자로

돌아가는 굉장히 신기한 프로그램이었는데, 아무리 검색해도 찾을수가 없네요.

혹시 기억 나시는분 계시면 알려주세요~~

ymir의 이미지

IOCCC 의 작품 중 하나였던 것 같은데, 지금은 사이트가 안 열리네요
http://www.ioccc.org/

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

johan의 이미지

barmi의 이미지

아래 주소에 있습니다.
http://okjsp.pe.kr/seq/30346

찾는키워드 : 악즉참 소스코드

제가 바람의 검심을 좋아해서 주인공중의 한 명에 관한 소스코드라 기억하고 있었네요.

kite7의 이미지

진짜 ..
대단하군요....

hongminhee의 이미지

KLDP에도 출몰하시는 lifthrasiir 님이 쓰고 계시는 Tour de IOCCC라는 게 있습니다. 악즉참 코드에 대한 해설도 있네요.

홍민희 (VLAAH, LangDev)

MasterQ의 이미지

고맙습니다! 악즉참이었네요~ 이것을 찾다가 더더욱 신기한것을 찾았습니다. IOCCC에서 나온것인데

이것을 실행하면 나오는것이 ppm 포맷의 그림파일인데, 코드안에 ray tracer가 들어가 있는것 같더군요. -_-;;;

stdout으로 output이 나오니까 redirect하셔서 보세요.

X=1024; Y=768; A=3;
 
J=0;K=-10;L=-7;M=1296;N=36;O=255;P=9;_=1<<15;E;S;C;D;F(b){E="1""111886:6:??AAF"
"FHHMMOO55557799@@>>>BBBGGIIKK"[b]-64;C="C@=::C@@==@=:C@=:C@=:C5""31/513/5131/"
"31/531/53"[b ]-64;S=b<22?9:0;D=2;}I(x,Y,X){Y?(X^=Y,X*X>x?(X^=Y):0,  I (x,Y/2,X
)):(E=X);      }H(x){I(x,    _,0);}p;q(        c,x,y,z,k,l,m,a,          b){F(c
);x-=E*M     ;y-=S*M           ;z-=C*M         ;b=x*       x/M+         y*y/M+z
*z/M-D*D    *M;a=-x              *k/M     -y*l/M-z        *m/M;    p=((b=a*a/M-
b)>=0?(I    (b*M,_      ,0),b    =E,      a+(a>b      ?-b:b)):     -1.0);}Z;W;o
(c,x,y,     z,k,l,    m,a){Z=!    c?      -1:Z;c     <44?(q(c,x         ,y,z,k,
l,m,0,0     ),(p>      0&&c!=     a&&        (p<W         ||Z<0)          )?(W=
p,Z=c):     0,o(c+         1,    x,y,z,        k,l,          m,a)):0     ;}Q;T;
U;u;v;w    ;n(e,f,g,            h,i,j,d,a,    b,V){o(0      ,e,f,g,h,i,j,a);d>0
&&Z>=0? (e+=h*W/M,f+=i*W/M,g+=j*W/M,F(Z),u=e-E*M,v=f-S*M,w=g-C*M,b=(-2*u-2*v+w)
/3,H(u*u+v*v+w*w),b/=D,b*=b,b*=200,b/=(M*M),V=Z,E!=0?(u=-u*M/E,v=-v*M/E,w=-w*M/
E):0,E=(h*u+i*v+j*w)/M,h-=u*E/(M/2),i-=v*E/(M/2),j-=w*E/(M/2),n(e,f,g,h,i,j,d-1
,Z,0,0),Q/=2,T/=2,       U/=2,V=V<22?7:  (V<30?1:(V<38?2:(V<44?4:(V==44?6:3))))
,Q+=V&1?b:0,T                +=V&2?b        :0,U+=V    &4?b:0)     :(d==P?(g+=2
,j=g>0?g/8:g/     20):0,j    >0?(U=     j    *j/M,Q      =255-    250*U/M,T=255
-150*U/M,U=255    -100    *U/M):(U    =j*j     /M,U<M           /5?(Q=255-210*U
/M,T=255-435*U           /M,U=255    -720*      U/M):(U       -=M/5,Q=213-110*U
/M,T=168-113*U    /       M,U=111               -85*U/M)      ),d!=P?(Q/=2,T/=2
,U/=2):0);Q=Q<    0?0:      Q>O?     O:          Q;T=T<0?    0:T>O?O:T;U=U<0?0:
U>O?O:U;}R;G;B    ;t(x,y     ,a,    b){n(M*J+M    *40*(A*x   +a)/X/A-M*20,M*K,M
*L-M*30*(A*y+b)/Y/A+M*15,0,M,0,P,  -1,0,0);R+=Q    ;G+=T;B   +=U;++a<A?t(x,y,a,
b):(++b<A?t(x,y,0,b):0);}r(x,y){R=G=B=0;t(x,y,0,0);x<X?(printf("%c%c%c",R/A/A,G
/A/A,B/A/A),r(x+1,y)):0;}s(y){r(0,--y?s(y),y:y);}main(){printf("P6\n%i %i\n255"
"\n",X,Y);s(Y);}

barmi의 이미지

정말 신기하네요.... 소스 좀 검토해 봐야 겠네요.

댓글 첨부 파일: 
첨부파일 크기
Image icon ray.jpg97.63 KB
lifthrasiir의 이미지

레이트레이서는 맘만 먹으면 작게 짜는 것도 어렵지 않습니다. 누가 C++/Ocaml 레이트레이서 코드 비교 해 놓은 것도 보니까 데이터 모델만 잘 잡으면 짧게 될 것 같더군요. 출력하는 씬이 단순한 것도 같은 이유일 것입니다.