用字符串a记录当前状态,每次从左到右遍历,提取三个字符(在a头部加入一个死细胞以方便处理左边界,容易看出右边界恒为活细胞因此不用处理)并计算下一个状态。
只用三种状态会导致元胞死亡,因此检查提取的子串是否是这三者之一即可。
最终代码有四行。
代码长度:108字节 vs. 全站第一:70字节。
z,s="█ ",range(100)
y,x=z
a=x*99+y
for i in s:print(a);a="".join(z[(x+a)[j:j+3]in(y*3,x*3,z+x)]for j in s)
|