
213
A.3 解答:ソーベル勾配の大きさ
これだけでボードゲームを開始できます。
random_board = np.random.randint(0, 2, size=(50, 50))
n_generations = 100
for generation in range(n_generations):
random_board = next_generation(random_board)
汎用フィルタを使うと、さらに簡単になります。
def nextgen_filter(values):
center = values[len(values) // 2]
neighbors_count = np.sum(values) - center
if neighbors_count == 3 or (center and neighbors_count == 2):
return 1.
else:
return 0.
def next_generation(board):
return ndi.generic_filter(board, nextgen_filter, size=3, mode='constant')
一部のライフゲームでは、おもしろいことに、いわゆるトーラス状のゲームボードが使えます。
つまり、ボードの左右の辺が「巻きついて」連結していて、同様に上下の辺もつながっています。
generic_filter
を使えば、我々の解答にトーラス版を組み込むように容易に変更できます。
def next_generation_toroidal(board): ...