跳到正文

系统

不动、脉动、移动:Life 里的三种生物

Conway's Game of Life 只有四条规则,没有任何设计,却会长出一眼认得出的生物。静物永远不变,振荡子会重复,飞船会移动。认得这三种,一张乱糟糟的棋盘就读得懂了。

Life 的棋盘不是一格一格读的,是按物种读的:什么不动、什么重复、什么在移动。

四条规则,没有设计

John Conway 在 1970 年设计了 Game of Life,同年 10 月 Martin Gardner 在 Scientific American 的专栏把它介绍给全世界。 棋盘是一格一格的细胞,每格不是活就是死,每格都看它周围的八个邻居。

规则只有四条。活格的活邻居少于两个,死。活格有两个或三个,活下去。活格多于三个,死。死格刚好有三个,活过来。这四条规则里没有提到任何形状,棋盘上却长满了像物种一样的形状;认得它们,就是读懂棋盘的方法。

静物:什么都不变

静物,是下一代和这一代完全一样的图案:没有格子死,也没有格子生。要做到这样,每个活格都要有两个或三个活邻居,而且没有任何一个死格刚好有三个。

最简单的是方块:一个 2 乘 2 的正方形。四个格子各有三个活邻居,全部活下去;周围每个空格最多只碰到两个,所以什么都不会生出来。蜂巢是六个格子排成的拉长六边形。每个活格刚好两个邻居;中间那两个空格各有五个,外面的空格最多两个,没有一个是三,所以一个格子都不会变。面包(loaf)、小船(boat)、浴缸(tub)都是同样的道理。静物,是一张混乱的棋盘安定下来之后留下的残骸。

振荡子:在原地跳动的心

振荡子在固定的代数之后回到原来的形状,这个代数叫周期,而且它不会移动。闪烁子是一横排三个格子。两端各只有一个邻居,死掉;中间那格有两个,活下去;正上方和正下方的空格各看到三个,生出来。横排变成直排,再过一代,直排又变回横排。

周期二只是开始:蟾蜍(toad)和信标(beacon)也是每两代重复一次,脉冲星(pulsar)每三代,十五项全能(pentadecathlon)每十五代。 振荡子给棋盘加上了节奏。一张静止的截图能告诉你格子在哪里,却看不出哪些格子在跳动。

飞船:会移动的图案

飞船也会回到自己的形状,只是换了地方。滑翔机是五个格子;四代之后形状一样,沿对角线挪了一格。轻型飞船(lightweight spaceship)则是沿着一横排走,速度是滑翔机的两倍。飞船就是信息穿过 Life 棋盘的方式:一组排列好的格子,从一个地方被搬到另一个地方。

Conway 在 1970 年悬赏五十美元,征求证明或否定「图案可以无限长大」。同年 11 月,Bill Gosper 带领的 MIT 团队用 glider gun 拿下了奖金:这个图案每三十代就射出一架新的滑翔机,永远不停。 原来无限的成长,只需要一台会制造飞船的机器。

从一锅汤到一堆灰,再到计算

随机把棋盘填满,头几代是一锅不停生生死死的沸汤。然后它会慢慢烧完。在一次简单的模拟里,一张填了一半、边界相连的 256 乘 256 棋盘,跑了 4,000 代之后,只剩大约百分之三的格子还活着;留下来最多的是方块、蜂巢和闪烁子,还有几架飞走的滑翔机。你也可以在 Life 棋盘上看着同一件事发生。

同样的零件,刻意排好,能做的事多得多。Berlekamp、Conway 和 Guy 在 Winning Ways(1982)里说明了,一串串滑翔机、glider gun 和摆好位置的静物,可以当成电线和逻辑闸,所以 Life 能做通用计算。这种能力的代价是:一般来说,不把一个图案跑起来,就没办法预测它的未来。这个想法的一维版本,256 条规则刚好装进一个 byte,写在《256 条规则,每条一个 byte》。