如何利用python實現生命遊戲

2021-10-12 02:49:47 字數 2146 閱讀 7234

英國數學家約翰·何頓·康威在2023年發明了 the game of life,今天番茄加速就來分享下如何利用python實現生命遊戲,規則如下:

每個細胞有兩種狀態 - 存活或死亡

每個細胞與以自身為中心的周圍八格細胞產生互動

當前細胞為存活狀態時,當周圍的存活細胞低於2個時(不包含2個),該細胞變成死亡狀態。(模擬生命數量稀少)

當前細胞為存活狀態時,當周圍有2個或3個存活細胞時,該細胞保持原樣。

當前細胞為存活狀態時,當周圍有超過3個存活細胞時,該細胞變成死亡狀態。(模擬生命數量過多)

當前細胞為死亡狀態時,當周圍有3個存活細胞時,該細胞變成存活狀態。(模擬繁殖)

拿個例子闡述上述狀態,如下種子時代:

[0, 0, 1, 0, 0]

[0, 1, 1, 0, 0]

[0, 0, 1, 1, 0]

[0, 1, 1, 1, 0]

[0, 0, 0, 0, 0]

座標[0,2]為乙個存活的細胞,因為周圍細胞個數為2,所以繁衍後依然存活;

座標[1,2]的存活細胞,因為周圍有4個存活細胞,所以繁衍後死亡;

座標[0,1]死亡細胞,因為周圍恰好有3個存活細胞,所以[0,1]處出現生命,

繁衍一代後的,完整圖如下:

[0, 1, 1, 0, 0]

[0, 1, 0, 0, 0]

[0, 0, 0, 0, 0]

[0, 1, 0, 1, 0]

[0, 0, 1, 0, 0]

第二代:

[0, 1, 1, 0, 0]

[0, 1, 1, 0, 0]

[0, 0, 1, 0, 0]

[0, 0, 1, 0, 0]

[0, 0, 1, 0, 0]

能到第幾代結束呢?借用 python 模擬了生命遊戲,整個**一共 60 行。

首先生成生命網格:

def get_board(size, alive_cons):

return [[1 if (i, j) in alive_cons else 0

for j in range(size)]

for i in range(size)]

獲得細胞的鄰域:

def get_neighbors(con):

x, y = con

neighbors = [(x + i, y + j)

for i in range(-1, 2)

for j in range(-1, 2)

if not i == j == 0]

return neighbors

def is_alive_con(con, alive_cons):

alive_neighbors = calculate_alive_neighbors(con, alive_cons)

if (alive_neighbors == 3 or

(alive_neighbors == 2 and con in alive_cons)):

return true

return false

def new_step(alive_cons):

board = itertools.chain(*map(get_neighbors, alive_cons))

new_board = set([con

for con in board

if is_alive_con(con, alive_cons)])

return list(new_board)

以上就是幾個核心的函式,下面主函式:

def main():

size = 5

board = [(0, 2), (1, 1), (1, 2), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

print_board(get_board(size, board))

for _ in range(10):

board = correct_cons(size, new_step(board))

print_board(get_board(size, board))

終止狀態:所有網格細胞狀態都為0

如何利用Python實現n n螺旋矩陣

目錄 3 3螺旋矩陣 1 2 3 8 9 4 7 6 5 def spiral n matrix 0 n for in range n 順時針方向 右,下,左,上 dx 0,1,0,1 dy 1,0,1,0 x y 0 dn 0 方向指標0 向右填充,1 向下填充,2 向上填充,3 向上填充 for...

如何利用 Python 實現快速埠掃瞄?

對線上伺服器進行埠掃瞄是一件很有用的事,可以驗證你的防火牆規則,避免暴漏不需要的服務。也可以知道你機器上開了哪些服務,不用等烏雲爆出來了才知道,有人黑進內網玩了好幾個月。哈哈,真事,伺服器被通過zabbix黑進來,開了乙個socket5的程序,自由進出。反正,這玩意很有用,本著奉獻精神,把 放出來,...

Python 生命遊戲的實現

給定乙個包含 m n 個格仔的面板,每乙個格仔都可以看成是乙個細胞。每個細胞都具有乙個初始狀態 1 即為活細胞 live 或 0 即為死細胞 dead 每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡 如果活細胞...