1970年に,ケンブリッジ大学のコンウェイによって作られたゲームである.二次元の碁盤の目を考える.それぞれのセルは二つの状態をとることができる.ここでは1(生)と0(死)とする.
正方形に碁盤の目は切られているので,斜め隣りも含めて周囲にマスは8個ある.
ライフゲームはあるステップから次のステップへの変換ルールを与えることで進行していく. そのルールは以下のとおり.
横一列に生きたセルが3つ並んだパターン(ブリンカー)はその後どのような進化をするだろうか?
implicit none integer NX_MAX,NY_MAX parameter (NX_MAX=130) parameter (NY_MAX=130) integer cell(0:NX_MAX+1,0:NY_MAX+1) integer cellnew(0:NX_MAX+1,0:NY_MAX+1)今のステップの情報(cell)と,次のステップの情報(cellnew)とが必要なので二つ宣言する.実際に使うセルのx軸方向の範囲が1からNX_MAX(この例では130)とすると, 配列は0-131まで宣言しておくこと. 0, 131はライフゲームが行われる領域の外周に対応する.0と131ではセルは常に死んでいるとする.
5 <= 生きているセルの総数 42 54 <= ここから下が生きているセルの座標(x座標,y座標の順) 42 55 43 55 41 55 41 56とする. したがって, データの読み込みは以下のようにすること.
read(1,*) ncell do i=1,ncell read(1,*) nx,ny cell(nx,ny)=1 enddo
write(2,*) ' 'と空白を書き込むことにより一行の空行を作っておくこと. こうしておくとアニメーションがgnuplotで観察できる. つまり、出力されるデータの内容はたとえば以下のようになる(このデータも適当です).
11 10 12 14 15 15 15 15 15 23 14 24 12 12 12 22 11 11 10 19 12 12
gnuplot> n=0 gnuplot> load 'anim.txt'ここで,anim.txtの中身は以下のとおり.
set xrange [0:131] set yrange [0:131] if (n>ループ回数) exit p "ファイル名" every :::n::n print n pause 0.1 n=n+1 reread"ファイル名"に結果を出力したファイル名を記入すること.ループの回数を"ループ回数"に記入すること.xrange, yrangeの範囲はNX_MAX, NY_MAXと同じにすること.n=0の0を別の数字に書き換えるとそのステップから表示が開始される.pause 0.1 の数字を減らすとアニメが早くなる.
ライフゲームは極めて単純な規則からなっているにも関わらず、極めて多様なパターンを生み出す. 上から順番に確認すること.
Rペントミノの進化を観察し、以下の問いに答えよ.
プログラムと問いの答えを送付すること.次回は期末テスト.
きしゃポッポの進化を観察し、以下の問いに答えよ.NX_MAX=1300, NY_MAX=130, 2000ステップまで計算すること.
プログラムと問いの答えを送付すること.アニメのファイルはサイズが大きくなるので,終了したら消去しておくこと.