Rubyでライフゲーム
スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
お金 | 仕事 | 勉強 | プライベート | 健康 | 心
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般
Rubyでライフゲーム。
マス目の端を考えなくていいように、配列は上下左右とも実際のマス目より1大きくしておく。
スポンサーリンク
コード
N = 10 ALIVE = 1 DEAD = 0 # 8 x 8 のマス目、配列は、10 x 10 @board = Array.new(N) { Array.new(N) { DEAD } } def compute_next arr = Marshal.load(Marshal.dump(@board)) 1.step(N-2, 1) do |row| 1.step(N-2, 1) do |column| count = 0 count += 1 if arr[row-1][column-1] == ALIVE # 左上 count += 1 if arr[row-1][column] == ALIVE # 上 count += 1 if arr[row-1][column+1] == ALIVE # 右上 count += 1 if arr[row][column-1] == ALIVE # 左 count += 1 if arr[row][column+1] == ALIVE # 右 count += 1 if arr[row+1][column-1] == ALIVE # 左下 count += 1 if arr[row+1][column] == ALIVE # 下 count += 1 if arr[row+1][column+1] == ALIVE # 右下 # update @borad if (count <= 1 || 4 <= count) @board[row][column] = DEAD elsif (arr[row][column] == ALIVE && ( count == 2 || count == 3)) @board[row][column] = ALIVE elsif (arr[row][column] == DEAD && count == 3) @board[row][column] = ALIVE else @board[row][column] = DEAD end end end end def print_board puts "-" * 30 1.step(N-2, 1) do |row| 1.step(N-2, 1) do |column| print " * " if @board[row][column] == ALIVE print " - " if @board[row][column] == DEAD end print "\n" end end def life_game(n) n.times do print_board compute_next end end @board[3][4] = ALIVE @board[3][5] = ALIVE @board[4][3] = ALIVE @board[4][4] = ALIVE @board[5][4] = ALIVE life_game 20
実行結果
------------------------------ - - - - - - - - - - - - - - - - - - - * * - - - - - * * - - - - - - - * - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - - - - - - - - - * * * - - - - - * - - - - - - - * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - - * - - - - - - * * - - - - - * - - * - - - - - * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - * * - - - - - - * * * - - - - * - - * - - - - - * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - * - * - - - - * - - * - - - - * - - * - - - - - * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - - * - - - - - * * - * * - - - * - - * - - - - - * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - * * * - - - - * * - * * - - - * - - * * - - - - * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------ - - - * - - - - - * * - * * - - - * - - - - - - - * - - - * - - - - * * * - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------ - - * * * - - - - * * * * - - - * * - - * * - - - * - * * - - - - - * * * - - - - - - * - - - - - - - - - - - - - - - - - - - - ------------------------------ - * - - * - - - * - - - - - - - * - - - - * - - * * - - - - - - - - - - - - - - - - * * * - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - * * - - - - - - * - - - - - - - * * - - - - - - - * * * - - - - - - - * - - - - - - - * - - - - - - - - - - - - ------------------------------ - - - - - - - - * * - - - - - - - - - - - - - - * - - - - - - - * * - * - - - - - - - * * - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - - - - - - - * * - - - - - - * * - - - - - - * * * * * - - - - - * * * - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - - - - - - - * * - - - - - - - - - * - - - - * - - - * - - - - - - - * - - - - - - * - - - - - - - - - - - - ------------------------------ - - - - - - - - - - - - - - - - - - - - - - - - * * - - - - - - - - - * * - - - - - - * * - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * * - - - - - - * * - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - - - - - - - - - - - - - - - - - - * - - - - - - * - * - - - - - * - * - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - - - - - - - - - - - - - - - - - - * - - - - - - * - * - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - - - - - - - - - - - - - - - - - - * - - - - - - - * - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
スポンサーリンク
>> 次の記事 : RubyでFizzBuzz問題を解いてみる
<< 前の記事 : Rubyでエイトクイーン問題をバックトラック法で解く
スポンサーリンク