这个谜题比 iPhone 还年轻。而它所玩味的那个理念——只要约束得当,两个记号就能承载一切——却有三个世纪的渊源,至今仍在你阅读这篇文章所用的机器里运转。
本文以英文撰写和编辑。此中文版本由机器翻译生成;凡涉及准确性之处,以英文原文为准。 阅读英文原文 →
Binairo 是一个年轻的谜题。它由比利时人 Peter De Schepper 和 Frank Coussement 于 2009 年创造,几乎就在同一时间,意大利人 Adolfo Zanellati 也设计出了一款几乎相同的游戏,并称之为 Tohu wa Vohu。1 这个想法显然已经成熟:一个网格,两个符号,再加上一小组关于平衡与相邻的规则。它在两个国家同时独立地诞生了。
结果,这个谜题拥有一小群名字。根据你在哪份报纸或哪款应用里遇到它,同一款游戏可能叫 Takuzu、Binero、Binoxxo、Tic-Tac-Logic、Binary Puzzles 或 Sudoku Binary,等等;“Binairo”和“Takuzu”在欧盟是注册商标。1 无论名字如何,规则都与本游戏引擎所执行的规则相同:每行每列保持平衡,不得有三个相同符号连成一排,任意两行(或两列)不得完全相同。2
这个谜题真正的祖先是二进制数制本身。1703 年,戈特弗里德·威廉·莱布尼茨写下了 Explication de l'Arithmétique Binaire——《二进制算术的解释:它只使用字符 1 和 0》——把这样一个观念形式化:任何数量,以及最终任何信息,都可以只用两个记号写出来。3 莱布尼茨对此痴迷到写下了一百多份相关手稿,其中大部分从未发表。3
三个世纪之后,这套双符号字母表成了一切数字事物的基底,而一个 Binairo 网格就是它一处小小的、可以用手解开的露头。每个格子都是名副其实的一个比特;一个完成的 10×10 棋盘,就是一个恰好满足某些非常特殊约束的百比特图案。这款游戏不声不响地成了一个关于双符号算术的谜题——正是莱布尼茨所阐述的那种算术。
看一眼已解开的 Binairo 棋盘,它读起来像是一片散乱的噪声。其实完全不是。它的两条规则——每条线保持平衡,任何符号都不得连续出现三次——恰恰是人们错误地以为真正的随机性必须具备的性质。如果让我们伪造一串抛硬币的结果,大多数人会本能地让每一小段中的正面和反面数量都接近相等,并回避连续出现的同一结果,因为连串让人觉得“不随机”。4
但真实的硬币并不会这样表现。真正的随机性时时刻刻都会产生连串和局部的不平衡;认为随机性必须自我纠正,正是有充分记录的赌徒谬误,其根源在于我们习惯于期待短样本反映长期平均值。4 Binairo 把这种错误的直觉变成了法则。它的棋盘根本不是随机的——而是对我们想象中的无序所做的精心设计的仿制品,比偶然所能产生的任何结果都要整齐。
Binairo 网格是一种带着规则手册的无序:整齐、没有连串、完美平衡的随机性——正是人类直觉想要、而真实的偶然从不提供的那种。
接下来的转折让这个故事首尾相接。这两条“伪随机”约束不只是认知上的怪癖——工程师出于实实在在的物理原因,会有意把它们施加在真实的比特流上。当数据沿导线传输或写入磁盘时,一长串相同的比特是危险的:接收端可能丢失时钟同步,信号的平均电压也可能发生漂移。因此,传输编码被设计成恰好禁止 Binairo 所禁止的东西。
经典的例子是 8b/10b 编码,它由 IBM 的 Al Widmer 和 Peter Franaszek 于 1983 年提出,被用于千兆以太网、USB 3.0 以及早期几代 PCI Express 等接口。它保证“一行中不会有超过五个连续的 1 或 0”——这是一种游程长度限制——并借助一个名为“不一致性”(disparity)的累计计数,使 1 和 0 的数量几乎相等,从而“在至少 20 比特的串中,1 与 0 的数量之差不超过二”。5 一条游程长度限制,一条平衡规则:工程师施加在健康比特流上的这两条约束,在精神上正是 Binairo 棋盘施加在其行与列上的两条约束。
于是,这个朴素的逻辑谜题站在了一个出人意料的十字路口。它的字母表属于莱布尼茨,它的质地是我们头脑所渴望的那种整齐的伪随机,而它的规则,正是让真实数据在光纤和闪存中飞驰时仍保持可读的那些规则。当你填写一个 Binairo 网格——平衡每一条线,拒绝每一个第三个连续符号——你就是在以微缩的形式,做线路编码芯片每秒多达数亿次所做的工作:把原始比特塑造成一条平衡、没有连串、毫无歧义的数据流。2
这也许就是这个谜题令人满足的隐秘原因。一个完成的棋盘不仅是正确的;它还像一个干净的信号那样格式良好。两个符号,几条约束,恰好一个答案——计算领域最古老的理念,化作了你可以就着一杯咖啡亲手解开的东西。