Best use of 1 Infinite Loop
無限ループの最高の使い方
受賞者:Qiming HOU
引用元:https://www.ioccc.org/2013/hou/hou.c
審査員・作者による説明:https://www.ioccc.org/2013/hou/hint.html
動作
シェーダがプログラム可能な3Dレンダラ。
次のように実行して待つ。
$ gcc -o tmp hou.c
$ ./tmp > tmp.c
$ gcc -o hou tmp.c -lm
$ ./hou BIG
please wait...
そのうち、画像を書き出したというログが出る。
$ ./hou BIG
please wait...
31 reopen luna.ppm
luna.ppmを開くと次のようになっている。
画像を書き出してもレンダリングは走り続け、定期的にファイルを上書きしていく。
画像は徐々に高画質になっていく。
一晩くらい走らせ続けると、このくらいの品質になるとのこと。
小ネタとして、上の棚は白い部分が”IOCCC”になっている。
引数にシーンデータを指定することで、別の画像もレンダリングできる。
詳細はhintファイルを参照。
添付されている生成画像へのリンクを置いておく。
解説
元のhou.cは、本体コードを圧縮したデータと、それの解凍を行うプログラムになっている。
この圧縮は、Prediction by Partial Matching(7-zipのベースとなっているデータ圧縮アルゴリズム)に基づいている。
なお、出力文字のうち空白文字の重みを大きくしたり、'"'
や'\'
の文字を出さないようにしたりして、IOCCCのサイズルールをパスするように工夫している。
出力がPPMなのは、これにかけた洒落とのこと。
hou.cコンパイルして実行すると、本体コードが出力される。
これをコンパイルしたものが3Dレンダラとして動く。
本体はシェーダのプログラムのインタプリタと、3D-DDAによるレイトレーサと、PSSMLTの光線パスサンプラの組み合わせとのこと。
知識がないのでほとんどわからない。
[[2004/gavare]]から始まったレイトレーシング系作品の終着点だろうか。
レンダリングの品質でこれを明確に(素人でもわかるように)上回るのは難しそうなので、新たなひねりを考える必要がありそう。