Best use of space and time
空間と時間の最高の使い方
受賞者:Gil Dogon
引用元:https://www.ioccc.org/2019/dogon/prog.c
審査員・作者による説明:https://www.ioccc.org/2019/dogon/hint.html
動作
HashLife手法による高速なライフゲームの実装。
X11で動く。
$ gcc -DX=640l -DY=480l -DZ=0x20000000 -o prog prog.c -lX11
$ ./prog < glider.mc
上下左右の矢印キーで視点を移動、-
でズームアウト。
+
でズームインできるとあるが、動作しなかった(シフトを押さずに+
を押せとあるが、それもダメだった)。
スペースでシミュレーションの開始と停止。
0
を押すと、スペースで1ステップだけ進むモードになる(もう一度押すと普通のモードに戻る)。
]
で、1ステップで進む世代数を倍にし、[
で半減する。
バックスペースで時間を戻す方向にすすめるモードにできる(もう一度押すと普通のモードに)。
解説
HashLifeはライフゲームを高速にシミュレーションするテクニック。
2の累乗にアラインしている同じパターンを共通化した四分木のダグ構造みたいなデータ構造でライフゲームの配置を表現することで、1世代ごとではなく2の累乗世代を1ステップで計算できる。
詳しくはWikipediaの記事などを参照のこと。
Gollyという実装が有名。
添付されている.mcというファイルもGollyのフォーマット。
コード形状は、ハッシュ『#』と、アンク『☥』。
アンクは生命を表す記号。
よって『#☥』でハッシュライフ。
ライフゲーム自体はIOCCCで定番のネタで、先行関連作品に[[1991/davidguy]]、[[1993/dgibson]]、[[2011/blakely]]、[[2012/dlowe]]がある。
いろいろな配置データが添付されているが、次の配置はIOCCC専用に作られている。
$ ./prog < message.mc