英國數學家約翰·何頓·康威在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 每個細胞與其八個相鄰位置 水平,垂直,對角線 的細胞都遵循以下四條生存定律 如果活細胞周圍八個位置的活細胞數少於兩個,則該位置活細胞死亡 如果活細胞...