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
'IOCCC 2019 #Hash Life Rules!'というメッセージがが流れる(ものすごくズームアウトしている)
図:'IOCCC 2019 #Hash Life Rules!'というメッセージがが流れる(ものすごくズームアウトしている)