INKWIRE(7) reasoning puzzles INKWIRE(7)
census
说谎者普查
所有人都早已知道,但不说出口就什么事都不会发生。
名称
题目
一座岛上一百位居民围成一个圈。每位居民能看见其他所有人的额头,唯独看不见自己的。每人的额头上要么有一个点,要么是空白,而你看别人的记号看得一清二楚。
所有人都知道这条规则:如果你能推断出自己额头上有记号,就必须在当天夜里离岛,而且你的推断会是对的。公告之后,任何人不得交流。
九十九位居民额头有点,一位是空白。一位访客到来,对全体说了一句真话:「你们当中至少有一个人的额头有点。」然后访客离开。接下来会发生什么?在哪一夜发生?
信号
条件与每个条件所强制的结论
| # | 条件 | 它强制了什么 |
|---|---|---|
| 1 | 每个人都能看见其他所有人的额头 | 每个有点的人恰好看见 98 个点;空白的那位看见 99 个点 |
| 2 | 每人都懂规则且推理无误 | 行为可以用「某人看见几个点」上的归纳来预测 |
| 3 | 「至少有一个点」所有人本就都知道 | 这句话没有增加任何一阶事实;它的全部贡献在于「它现在成了公共知识」——人人都知道人人都知道,可以无限往上叠 |
| 4 | 任何人无法发信号或商议 | 唯一的信息更新渠道是每晚的离岛情况,而这件事本身也是公共知识 |
| 5 | 恰好一位居民是空白 | 99 位有点的人各自看见 98 个点,归纳深度到 98,于是他们全部在第 98 夜离岛 |
例子
解题法
对「每个人看见什么」做归纳。访客那句话增加的不是关于点的信息,而是给「人人可以依赖别人也知道」这件事加了一个深度下限。
[+] 完整解法 4
先从只有一个点的情况开始。看见零个点的人听到「至少有一个点」,立刻知道那就是自己,于是在第一夜离岛。
两个点的情况:每个有点的人看见一个点,会推理「如果我是空白,那他就是唯一一个有点的人,他今晚就会走」。第一夜无人离岛,于是两人都断定自己有点,在第二夜离岛。
规律可以推广:有 n 个点时,全部 n 位有点者在第 n 夜一起离岛。因为每人都看见 n−1 个点,会等待 n−1 个夜晚,去看那个「若自己是空白就该发生」的离岛。本题中 n = 99,所以第 99 夜,99 位有点者同时离岛,空白的那位留下。
空白的那位看见 99 个点。只有当 n = 100 时,这个观察才与「自己也有点」相容;而第 98 夜无人离岛这一点,对他而言排除了 n = 100。他的推理完全正确,结论是自己空白——这正是他留下来的原因。
近亲条目
- [P] twelve-coin 有一枚假币,但不知道它偏重还是偏轻。
- [P] blue-eyes 一条规则、一座没有镜子的岛,和一句改变一切的话。
- 目录 — /zh/t/puzzle/
[+] 补充与常见疑问 3
- 这句话究竟改变了什么?
- 它造出了一个基础情形。没有它,「如果我是空白,那么他就会看见零个点、今晚就走」这条链条没有起点,因为没人确定这条链能落到底。这句话提供了归纳所依赖的那个平凡情形。
- 为什么需要 99 夜,而不是一夜?
- 因为归纳的每一层都必须被观察到,而不能被假定。每一个无人离岛的夜晚都是一份证据,把所有人对「点的数量下限」的估计往上推一格。
- 访客说的必须是真的吗?
- 必须。如果这句话为假,第一夜预期中的离岛就不会发生,归纳会在第二天崩塌而不会继续推进。虚假的公告不会产生任何协同行为。
适用范围 — 本题用于推理练习;上面的归纳以一般 n 的形式给出。