ライフゲーム #29

set_gen0.gのはみ出し警告になにやらバグがある気がする。
はみ出さない配置なのに警告が出ることが起こるようだ。
設定動作そのものには影響していないようなのでとりあえずそのままに(え?*1

気を取り直して、作成したトーラス面で滑空するGliderを見てみる。

$ gvpr -f gen_torus.g -a 12,6 | gvpr -cf set_gen0.g -a "glider.txt 8,2" > glider_t_00.gv

Gliderは4世代で1ノード斜めに移動する。
幅12と高さ6の最小公倍数は12なので、Gliderは第0世代の位置に12×4=48世代後に戻るはずである。

$ gvpr "BEGIN{
>   int i;for(i=0;i<47;i++)
>   system(sprintf('gvpr -cf next_gen.g glider_t_%02d.gv > glider_t_%02d.gv',i,i+1));
> }"
$ gvpr "BEGIN{
>   int i;for(i=0;i<=47;i++)
>   system(sprintf('gvpr -cqf vis_alive_2.g -a .05 glider_t_%02d.gv | neato -Nlabel=\"\" -T png -o glider_t_%02d.png',i,i));
> }"

ついでにLightweight Spaceshipを飛ばしてみる。

lwss.txt
0,0
0,1
0,2
1,0
1,3
2,0
3,0
4,1
4,3
$ gvpr -f gen_torus.g -a 12,6 | gvpr -cf set_gen0.g -a "lwss.txt 6,1" > lwss_00.gv

こちらは2世代で水平方向に1ノード進むので、幅12なら24世代で第0世代の位置に戻るはず。

$ gvpr "BEGIN{int i;for(i=0;i<23;i++)system(sprintf('gvpr -cf next_gen.g lwss_%02d.gv > lwss_%02d.gv',i,i+1));}"
$ gvpr "BEGIN{
>   int i;for(i=0;i<=23;i++)
>   system(sprintf('gvpr -cqf vis_alive_2.g -a .06 lwss_%02d.gv | neato -Nlabel=\"\" -T png -o lwss_%02d.png',i,i));
> }"

いつものようにImageMagickのconvertでanimated GIFに変換する。
Glider

Lightweight Spaceship

*1:さすがに1ヶ月ほどgvprプログラムと付き合ってると飽きてきた