寫在前面的一小點介紹:(https://jq.qq.com/?_wv=1027&k=8PRAY8Vo) 生命游戲由英國數學家約翰·H·康威設計的,是一種類似於生物社會的興衰和交替的游戲。 游戲使用無限大小的矩形網格,其中每個網格都是空的或被有機體占據。被占用的細胞是活的,而空的細胞是死的。 游戲在特 ...
寫在前面的一小點介紹:(https://jq.qq.com/?_wv=1027&k=8PRAY8Vo)
生命游戲由英國數學家約翰·H·康威設計的,是一種類似於生物社會的興衰和交替的游戲。
游戲使用無限大小的矩形網格,其中每個網格都是空的或被有機體占據。被占用的細胞是活的,而空的細胞是死的。
游戲在特定時期內進行,每一輪都會根據當前配置中生物體的排列創建一個新的世代。
下一代網格的狀態,是通過將以下四個基本規則應用於當前配置的每個網格來確定的:
- 如果一個細胞還活著並且有兩個或三個活著的鄰居,那麼該細胞在下一代中仍然活著;
- 一個沒有活鄰居或只有一個活鄰居的活細胞會在下一代死於孤立;
- 有四個或更多活鄰居的活細胞會因下一代人口過剩而死亡;
- 一個只有三個活著的鄰居的死細胞會導致出生併在下一代中存活;
board = [[1, 0, 0], [1, 0, 0], [1, 0, 0]]
# 鄰居數組為給定的單元格找到8個相鄰的單元格
neighbors = [(1, 0), (1, -1), (0, -1), (-1, -1), (-1, 0), (-1, 1), (0, 1), (1, 1)]
rows = len(board)
cols = len(board[0])
# 創建一個原始板的副本
copy_board = [[board[row][col] for col in range(cols)] for row in range(rows)]
# 逐個單元地迭代
for row in range(rows):
for col in range(cols):
# 對於每個單元計算鄰居的數量
live_neighbors = 0
for neighbor in neighbors:
r = (row + neighbor[0])
c = (col + neighbor[1])
# 檢查相鄰細胞的有效性,以及它是否原來是一個活細胞
# 評估是針對副本進行的,因為它永遠不會更新。
if (r < rows and r >= 0) and (c < cols and c >= 0) and (copy_board[r][c] == 1):
live_neighbors += 1
# 規則1或規則3
if copy_board[row][col] == 1 and (live_neighbors < 2 or live_neighbors > 3):
board[row][col] = 0
# 規則4
if copy_board[row][col] == 0 and live_neighbors == 3:
board[row][col] = 1
print(board)
結果如下:
# 輸入
board = [[1, 0, 0], [1, 0, 0], [1, 0, 0]]
# 輸出
board = [[0, 0, 0], [1, 1, 0], [0, 0, 0]]