PlayPendium
Contemporaries · 思考的食粮

他们可能见过面吗?

每一轮都抛出一个看似简单的问题。它的全部答案只存放在每个人的两个整数里,以及从一次握手跃向一群人的那一次悄然飞跃之中。

Da Vinci ∩ Michelangelo 45 两人同时在世的年数,从 1475 年到 1519 年
对比
Da Vinci ∩ Shakespeare 0 共同的年数;Leonardo 卒于 1519 年,Shakespeare 生于 1564 年

本文以英文撰写和编辑。此中文版本由机器翻译生成;凡涉及准确性之处,以英文原文为准。 阅读英文原文 →

01 · 两个整数,一生

一生就是一段区间

把一位历史人物剥到只剩游戏所需要的东西,几乎什么也不剩了。不是他的作品,不是他的名声,只有两个数字:出生的年份和去世的年份。Leonardo da Vinci 变成了 1452–1519;William Shakespeare 变成了 1564–1616。在游戏自己的源码里,每一段人生都是一个“闭整数区间”,从生年一直延伸到卒年。1

这个词在实实在在地干活。闭区间把两个端点都包含在内,所以你出生的那一年和去世的那一年都算作你活着的年份。这是个很小的决定,却有看得见的后果:即便一个人恰好死于另一个人出生的那一年,两人也能“相遇”。游戏是有意这样构建的:当它按年份顺序扫过一手牌中的出生与死亡以寻找最大的一组时,“同一年里,出生先于死亡被处理”,因此一段终于 1519 年的人生,仍与一段始于 1519 年的人生擦肩相碰。1

02 · 握手检验

两段人生要么重叠,要么不重叠

问两个人是否可能见过面,其实就是在问他们的两段区间是否共有任何一年。有一个干净利落的检验方法。两段人生重叠,当且仅当每一段的开始都不晚于另一段的结束。在代码里这只是一行:A 的生年 ≤ B 的卒年并且 B 的生年 ≤ A 的卒年。1

拿上面的对阵试一试。Da Vinci(1452–1519)与 Michelangelo(1475–1564):Michelangelo 生于 1475 年,远在 Leonardo 1519 年去世之前,而 Leonardo 的出生又远早于 Michelangelo 的去世——重叠确凿无疑,是一个 45 年的共同窗口,从 1475 年到 1519 年。那么 Da Vinci 与 Shakespeare 呢?Leonardo 死于 1519 年;Shakespeare 要到 1564 年才出生。两段区间从未触碰。历史上两个如雷贯耳的名字,而生卒年份的朴素算术平平地宣告:他们不可能见过面。1

名声活在“很久以前”的雾气里。这款游戏拒绝这团雾。两个日期决定一切,而日期并不在乎你有多出名。

03 · 从一对到一群

让它成为谜题的那一次飞跃

检验两个人只是算术。游戏要的更大:从你手中的牌里找出最大的一组,他们全都可能同时在世——不是两两之间,而是在同一个共同的时刻。这里直觉可能误导人,因为“这一组里每个人都可能见过其他每个人”,与“存在某一年他们全都活着”,并不显然是同一个说法。

了不起的是,对于人的寿命而言,这两者确实是同一个说法,而游戏正是倚靠这一点。它不去逐对检查,而是一举检查整组:一个集合共有某一年,当且仅当最晚的生年不晚于最早的卒年。把这一组排开,取最晚到场的人和最早离场的人;如果后来者在第一个人离开之前就已到场,就存在一个容得下所有人的年份。1

游戏算的恰恰是这个。它在集合中扫出最大的生年和最小的卒年,检查是否最晚生年 ≤ 最早卒年。1 一次比较就为一群人出具了证明。至于这条捷径凭什么成立,那是一个有名字也有年份的小小数学奇迹,本系列另有一篇文章专门谈它。2

04 · 实例演算

找出共同的年份

取一手五位文艺复兴艺术家的牌,有意大利人也有德国人,他们的一生横跨 1445 到 1576 年。重叠检验不过是两列数字之间的一场赛跑:生年那一列里最大的数,和卒年那一列里最小的数。1

一手示例牌:谁在什么时候活着
人物生年卒年在这一组里吗?
Sandro Botticelli(桑德罗·波提切利)14451510是,并且定下了这个窗口的终点
Leonardo da Vinci(列奥纳多·达·芬奇)14521519
Albrecht Dürer(阿尔布雷希特·丢勒)14711528
Michelangelo(米开朗基罗)14751564
Titian(提香)14881576是,并且定下了它的起点

在 da Vinci、Dürer、Michelangelo 与 Titian 之中,最晚的生年是 Titian 的 1488 年,最早的卒年是 da Vinci 的 1519 年。既然 1488 ≤ 1519,这四人共有从 1488 到 1519 的每一年,是个还留有余裕的共同窗口。把 Botticelli 加进来,窗口会收窄,但依然成立:他 1510 年去世,成为最早的卒年;既然 1488 ≤ 1510,这五人共有 1488 到 1510 年。可要是再加进任何一位生于 1510 年之后的人,最晚的生年就会爬到最早卒年之上,这一组便会碎裂。这款游戏的艺术,就在于知道该把哪个名字留在外面。1

以上的年份与生卒区间,直接取自游戏自己的人物名单。1

05 · 这套机制为何动听

一条一只手就握得住的规则

最好的游戏机制,是那种一句话就能说清、然后你花上一小时也掌握不了的机制。Contemporaries 正合此格。规则无非是“共有一年”,检验无非是拿一个最大值去比一个最小值。计分同样朴素:有效的一组越大、找得越快,得分越高,而且与可能的最大组吻合还有奖励。游戏不会接受一个从未共有过某一年的组合;它会要求你先调整,再提交。一组锁定之后,结果卡片会把这项检验翻回成日期:它会告诉你,你所选的人全都活在其中最晚的生年与最早的卒年之间;如果你没能凑够最大的那一组,它还会说出那一组有多少人,以及他们全都在世的年份。这里没有词汇要死记,也没有隐藏状态。你需要的一切都印在卡片上:一个名字、一个领域、两个年份,以及它们之间的跨度。1

不过,这条规则所生成的,是野心与现实之间一种真切的张力。你想要最大的一组,于是很容易忍不住把桌上的每一张牌都揽进来。但你每多加一个人,只可能把最晚的生年往后推,或把最早的卒年往前拉,绝不会反过来。每一次添加都是一场赌博,都会收窄那个共有的窗口。这一条诚实的约束就是整款游戏,而它完全出自一个关于人生最朴素不过的模型:它开始的那一年,和它停止的那一年。1

Sources & notes
  1. Contemporaries game engine, the overlap rule, the closed-interval convention, the "latest birth ≤ earliest death" group test, and the figure dataset (birth/death years) are all read from the game's own source.
  2. On why pairwise overlap guarantees a common year for intervals, see the companion piece in this series, “The One-Dimensional Miracle,” and Wikipedia's Helly's theorem article.
Was this worth reading?
Play Contemporaries
PlayPendium · About · Contact · Privacy · Terms · Cookies · Accessibility · Copyright · Browse all games · Classic arcade games · © 2026