类似于生命的细胞自动机是类似于Conway的“生命游戏”的细胞自动机,因为它们在(理论上)无限大的正方形网格上运行,其中每个单元正好有8个邻居,并且是2个状态之一,即存活和死亡。
但是,这些类似Like的版本在关键方面有所不同:给定单元存活的规则以及给定单元存活到下一代的规则。
例如,经典的“生命游戏”使用规则B3/S23
,这意味着需要3个活细胞才能生出一个新细胞,而2或3个活着的邻居才能存活。对于此挑战,我们将假设邻居不包括自身,因此每个单元恰好具有8个邻居。
给定一个初始配置,一个出生规则,一个生存规则和一个正整数(要运行的世代数),您的任务就是使用这些规则模拟生命似的自动机,以尽可能短的代码给出世代数。您可以选择初始配置为方矩阵/ 2维数组或多行字符串。其他可以以任何合理的格式和方法给出。
例如,如果出生规则是12345678
(任何居住的邻居),则生存规则是2357
,并且初始配置是
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 0 0 0 0
接下来的两代人
Generation 1: Generation 2:
0 0 0 0 0 1 1 1 1 1
0 1 1 1 0 1 1 0 1 1
0 1 0 1 0 1 0 1 0 1
0 1 1 1 0 1 1 0 1 1
0 0 0 0 0 1 1 1 1 1
如果给定的世代数为10,则输出将类似于
0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 1 1 1 0
您不必处理在输入矩阵给定范围之外发生的更改,但是,矩阵外部的所有像元都会开始失效。因此,输入矩阵可以是任何大小,最大为您的语言可以支持的最大值。您无需在各代之间输出电路板。
这是一个代码高尔夫球,因此最短的代码获胜。
测试用例
这些使用B/S
符号表示使用的规则
B2/S2
,generations = 100
,配置:
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0
输出:
0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 0
1 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B1357/S2468
,generations = 12
,配置:
1 0 1 0 1 0
0 1 1 0 1 0
1 0 0 0 0 0
0 0 0 0 0 1
1 1 1 1 1 0
0 1 1 0 0 1
输出:
0 1 0 0 0 0
0 1 1 1 1 0
0 1 0 1 1 0
1 1 1 0 0 0
0 0 1 1 1 0
0 1 1 0 0 0
如果您需要生成更多的测试用例,则可以使用这个出色的模拟器。请确保限制板子尺寸