生命游戏
* * * *
拉格朗日计划
* * * *
生命游戏

生命游戏是一种能按规则演化的自动机。

设有一个$m\times n$的、由$1\times 1$的方格组成的网格,每个方格有死活两种状态,分别用"."和"#"表示。

每一轮中每个方格都会根据其当前状态和其周围八格(边界外的格子视为死格)的状态演化,具体规则如下:

若当前格为死格,且其周围八格中恰有三个活格,则它将复活,否则它仍是死格。

若当前格为活格,且其周围八格中恰有两个或三个活格,则它仍是活格,否则它将死亡。

给定一个$32\times 32$的网格,输出其演化一次后的状态。

本题难度:



解答

为方便处理边界,在网格下方和右侧周围加一层死格再遍历计算(因为-1下标返回列表最后一项,因此无需在上方和左侧添加)。

最终代码有四行。

代码长度:186字节 vs. 全站第一:106字节。

import sys
d="."
a=[j+d for j in sys.argv[1].split()]+[d*33]
for i in range(32):print("".join(".#"[sum(a[i+k//3-1][j+k%3-1]==d for k in range(9))in[6,6-(a[i][j]!=d)]]for j in range(32)))