引用元: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
は虚数がデフォルトで入っている。
コードは四則演算、比較、Abs2
、Re
、Im
、Exp
、Ln
が使えるとのこと。
それぞれについて詳しくはhint.text参照。
また、フラクタル指定の例もhint.textにいろいろ掲載されている。
上述の通り、このプログラムはコマンドライン引数に与えられたコードをx86(とx87 FPU)か、x86_64の機械語に翻訳して実行する。
そのため、実行可能フラグがたったメモリページが必要で、mmap()
を使う。
コードは例によってマンデルブロ集合の形状。
賞名は[[2006/stewart]]と対称的になっている。