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でエイトクイーン問題をバックトラック法で解く
スポンサーリンク