[C][IOCCC] The 24th IOCCC: Best One-liner

f(y,x){int m,z;for(m=z=1;m*m<=y?z=y%m?z:m:x+1?z<2?x?f(x,0):putchar(64):f(z,x),putchar(x?10:32),y-=z:(f(z,y/z),0);)m++;}main(y){f(y-1,-1);}

実行します。

$ gcc -o prog prog.c

$ ./prog @
@ 

$ ./prog @ @
@ @ 

$ ./prog @ @ @
@ @ @ 

$ ./prog @ @ @ @
@ @ 
@ @ 

$ ./prog @ @ @ @ @
@ @ @ @ @ 

$ ./prog @ @ @ @ @ @
@ @ @ 
@ @ @ 

$ ./prog @ @ @ @ @ @ @
@ @ @ @ @ @ @ 

$ ./prog @ @ @ @ @ @ @ @
@ @  @ @  
@ @  @ @  

$ ./prog @ @ @ @ @ @ @ @ @
@ @ @ 
@ @ @ 
@ @ @ 

$ ./prog @ @ @ @ @ @ @ @ @ @
@ @ @ @ @ 
@ @ @ @ @

以上。

戦略と狙い

Animated Factorization Diagrams をイメージして作ってみました。

正直、これが通ったのは予想外でした。ワンライナーで大切なのは「こんな複雑そうなものがたったこれだけで!」というインパクトだと思うのですが、因数分解なんかはいかにも短く書けそうなネタなので、インパクト弱いなーと思ってました。しかも因数分解だけで 140 文字ぎりぎりになってしまうというゴルフ力のなさにがっかりした。でも解析したくなる程度の複雑さなのが逆によかったのかもしれない。

まとめ

ということで、IOCCC に入賞した endoh の 4 プログラム紹介でした。今回は本当にレベル高かったので、ぜひ他のプログラムも見てみてください。