INKWIRE(7) reasoning puzzles INKWIRE(7)
blue-eyes
午夜渡轮
一条规则、一座没有镜子的岛,和一句改变一切的话。
名称
题目
一座岛上住着推理完美的人。每个人眼睛是绿色或灰色,能看见所有人的眼睛,唯独看不见自己的。岛上没有可以照出影像的表面,也禁止谈论眼睛颜色。
法律是精确的:任何人若推断出自己的眼睛颜色,就必须在当天午夜搭渡轮离岛;而猜错的人要受罚。一百年来,没有一个人离岛。
某天清晨,一位数了很多年的渡轮夫对着聚拢来的岛民说:「我能看到至少一个人的眼睛是绿色的。」他说的是真话。假设三百位岛民中恰好有 40 位绿眼。接下来会发生什么?什么时候发生?
信号
条件与每个条件所强制的结论
| # | 条件 | 它强制了什么 |
|---|---|---|
| 1 | 每位岛民都能看见其他所有人的眼睛 | 绿眼岛民看见 39 双绿眼;灰眼岛民看见 40 双绿眼 |
| 2 | 没有镜子,且禁止谈论眼睛颜色 | 没有人能靠观察或询问得知自己的颜色,只能靠对他人行为的推断 |
| 3 | 离岛需要确定性,猜错要受罚 | 只有当所有其他可能性都被「无人离岛」这个观察排除干净,岛屿居民才会离开 |
| 4 | 「至少有一个绿眼」为真,且所有人本就相信它 | 这句话的内容是旧的;新的是所有人现在都知道所有人都听见了它,并且知道彼此都知道,可以无限往上叠 |
| 5 | 恰好 40 位绿眼岛民 | 归纳给出第 40 夜:在第 k 夜,所有看见恰好 k−1 双绿眼的人离岛 |
例子
解题法
对绿眼岛民的人数做归纳。公告的唯一作用是给那条推理链造出一个基础情形——在这之前,这条链根本无法启动。
[+] 完整解法 4
先看最小情形。如果只有一位绿眼岛民,他会看见零双绿眼,听到公告后立刻知道公告说的就是自己,于是在第一夜离岛。
两个的情形:每位绿眼岛民看见一位绿眼,推理「如果我是灰眼,那他就是唯一一位,今晚就会走」。第一夜无人离岛,于是两人都断定自己是绿眼,在第二夜离岛。
由归纳,n 位绿眼岛民会在第 n 夜一起离岛。本题 n = 40,所以第 40 次午夜渡轮上,40 位绿眼岛民同时离开,其余 260 位灰眼岛民留下——他们要在第 39 夜过去之后才能排除更低的计数,而对他们的自身颜色来说,第 39 夜的沉默并不足以定案。
把最后这一点说清楚:灰眼岛民看见 40 双绿眼,他会推理「如果我是绿眼,总共有 41 位,那么离岛发生在第 41 夜;如果我是灰眼,总共有 40 位,那么今晚就会发生」。于是他等的其实是第 40 夜。第 40 夜正是那 40 位绿眼离开的夜晚,因此灰眼岛民在次日清晨得知自己的颜色,于第 41 夜离岛。
近亲条目
- [P] census 所有人都早已知道,但不说出口就什么事都不会发生。
- [P] twelve-coin 有一枚假币,但不知道它偏重还是偏轻。
- 目录 — /zh/t/puzzle/
[+] 补充与常见疑问 3
- 既然人人都能看见绿眼,40 这个数字为什么还重要?
- 因为真正起作用的是推理的深度。一个看见 39 双绿眼的人必须考虑「如果只有 38 双会怎样」,而那个假设中的人又必须考虑 37 双,如此一直降到零。公告的作用是让这条下降链条终结。
- 灰眼岛民也会离岛吗?
- 会,晚一晚。看见 40 双绿眼的人无法区分「我是灰眼」和「我是绿眼」,直到第 40 夜过去:如果他也是绿眼,总数就是 41,第 40 夜不会发生任何事。当第 40 次渡轮载走 40 人,他就知道了,并在第 41 夜离开。
- 如果渡轮夫说的是「至少有两个绿眼」呢?
- 那么整个时间表会整体前移一晚:归纳从 2 而不是从 1 起步,离岛会发生在第 39 夜而不是第 40 夜。公告所给的「下限」决定了基础情形。
适用范围 — 本题用于推理练习;上面的归纳对任意绿眼人数都精确成立。