Best Compiled Graphics

最高のコンパイルされたグラフィックス

受賞者:Maurizio Monge

引用元:https://www.ioccc.org/2006/monge/monge.c

審査員・作者による説明:https://www.ioccc.org/2006/monge/hint.text

動作

フラクタルをインタラクティブに観察できるビューア。

マンデルブロの例。

$ gcc -o monge monge.c `sdl-config --libs --cflags`

$ ./monge "z = 0" "z = z*z + c; Abs2(z) < 4"
マンデルブロ集合が表示される
図:マンデルブロ集合が表示される

左クリックでズームアップ、右クリックでズームダウン。 マンデルブロの右上あたりを少しだけ拡大した例。

マンデルブロ集合の右上あたりを拡大した様子
図:マンデルブロ集合の右上あたりを拡大した様子

さらに拡大。

さらに拡大した様子
図:さらに拡大した様子

他のフラクタルも描ける。

$ ./monge "z = 0" "z = z*z*z + c; Abs2(z) < 4"
別のフラクタルも表示できる
図:別のフラクタルも表示できる

フラクタルの指定方法は解説で。

解説

審査員は[[1994/tvr]][[2001/bellard]]の組み合わせと評している。 フラクタルビューアは前者で既出だけれど、フラクタルの指定が柔軟なこと、拡縮ができることに加え、内部実装でx86バイナリを生成してそれを実行しているらしい。

フラクタルの指定はコマンドライン引数で行う。 第1引数は変数の初期化で、第2引数は最後の式が偽になるまで(または回数上限まで)実行を繰り返すコード。 変数は小文字のaからzだが、cはピクセルの位置、iは虚数がデフォルトで入っている。 コードは四則演算、比較、Abs2ReImExpLnが使えるとのこと。 それぞれについて詳しくはhint.text参照。 また、フラクタル指定の例もhint.textにいろいろ掲載されている。

上述の通り、このプログラムはコマンドライン引数に与えられたコードをx86(とx87 FPU)か、x86_64の機械語に翻訳して実行する。 そのため、実行可能フラグがたったメモリページが必要で、mmap()を使う。

コードは例によってマンデルブロ集合の形状。

賞名は[[2006/stewart]]と対称的になっている。