ライフゲーム #25
メッシュをはみ出してしまうような設定が行われた場合は警告を出すようにすべきか?
現状、はみ出してしまうような座標が指定されても無視するだけなので問題は少ないが。
set_gen0.g
BEGIN { ...snip int fd = openF(filename, 'r'); string p[], s; int pn = 0, mpx = -1, mpy = -1, minusp = 0; for (s = readL(fd); s != ""; s = readL(fd)) { s = substr(s, 0, length(s) - 1); int x = xOf(s) + x0, y = yOf(s) + y0; p[pn++] = sprintf('%d,%d', x, y); mpx = MAX(mpx, x); mpy = MAX(mpy, y); if (minusp == 0 && (x < 0 || y < 0)) minusp = 1; } closeF(fd); } BEG_G { int mx = -1, my = -1; } N { int i; for (p[i]) { if (name == p[i]) { alive = 1; break; } } mx = MAX(mx, xOf(name)); my = MAX(my, yOf(name)); } END_G { if (minusp != 0 || mx <= mpx || my <= mpy) { printf(2, 'warning: some alive nodes in list exceed bounds of graph:%s\n', name); } }
はみ出すものがある場合は、
$ gvpr -f gen_mesh.g -a 4,6 | gvpr -cf set_gen0.g -a still.txt -a 1,0 | ...snip warning: some alive nodes in list exceed bounds of graph:%1
のように警告を出す。
set_gen0.gへ指示する移動量は負の値も指定できるので、
$ gvpr -f gen_mesh.g -a 4,6 | gvpr -cf set_gen0.g -a still.txt -a 0,-1 | ...snip warning: some alive nodes in list exceed bounds of graph:%1
のように負の側へのはみ出しも検出する。