【谜题】XKCD谜题系列:100个囚徒+100个海盗

By 爱狗却养猫 at 2020-04-15

1. 100个囚徒

100个囚徒被关在监狱里。他们被告知,一小时后他们会被分别带入没有窗子、隔音的小房间。接着,一个一个,顺序随机,他们会从小房间中被带出来审问,再送回小房间。所有的审讯都会在同一个房间进行,哪个房间里有一个电灯,还有一个可以控制电灯的开关。最开始时,灯是关着的。当处于审讯室时,囚徒可以自由地将电灯打开或关上,无论几次都可以,而看守不会碰开关。小房间里看不到审讯室灯的状态。每次只审讯一个人,但同一个人可以被审讯多次。除了那个电灯开关以外,囚徒之间没有互相沟通的方法;且审讯时间随机,所以无法从中获得信息。在任何时候,任何一个囚徒都可以在审讯中宣称:“所有人都已至少被审讯了一次。”如果说对了,所有人都会被释放;如果说错了,所有人都会被处决。现在开始,囚徒们有一个小时的时间商量策略,之后就会被互相隔离。怎样能让他们被成功释放?

100 prisoners are being held in a prison. They are told that in one hour, they will all be taken to separate windowless, soundproof rooms. One at a time, and in a random order, they will be taken from their rooms, interrogated, and then sent back to their rooms. All interrogations will take place in the same room, which contains one light bulb and the switch that operates it. The light is initially off, but the inmates are free to toggle the switch as often as they want, whenever they are in the interrogation room, and the guards will not toggle the switch at all. No person can see the light from his room. Only one person is interrogated at a time, each person can be interrogated multiple times, and they have no way of communicating besides the light switch. The length and amount of time between interrogations is random, so no help there. At any time, any person under interrogation may state, “Everyone has been interrogated at least once.” If this statement is true, everyone will be released. If it is false, all of the people will be executed. The people have one hour to work out their strategy before they’re isolated for good. How do they get released?

1.2 100个囚徒(续)

(1) 加分项,如果囚徒们不知道最开始电灯是开着还是关着,他们有什么策略吗?

(2) 另外,假设每天一次审讯。在这种情况下有更有效率的解。

For bonus points, what is their strategy if they don’t know the initial state of the light switch?

Alternative: suppose there is one interrogation per day. In this case there exist different more efficient solutions.

2. 100个海盗

100个海盗(p1,p2,…p100)在分50个金币。海盗有等级顺序,也就是说,p1是海盗头目,p2比他低一级,p3比p2低一级,等等。分金币的过程是这样的:由仍然活着的、具有最高等级的海盗提出一个分金币的方案,所有仍然存活的海盗(包括提出方案者)对此方案投票。如果至少一半投票的海盗投赞成票,方案通过;否则提出方案的海盗会被处决,由下一等级海盗继续这个过程。每个海盗都非常聪明、理智、逻辑满分。每个海盗的优先级为:首先活着,然后得到尽可能多的金币,最后希望尽可能多的其他海盗被杀。所以如果两种方案他都能存活,他会选择他拿到金币更多的方案;如果两种方案他都能存活且获得同样数额的金币,他会选择让更多其他海盗死亡的方案。在这些条件下,金币会怎样分割呢?

100 pirates (p1, p2, … p100) are dividing up a treasure consisting of 50 indivisible gold coins of equal worth. The pirates have a total-order hierarchy, i.e. pirate p1 is the head pirate, p2 is a rank lower in the order, p3 lower still, … The process works like this: The highest ranking pirate who is still alive proposes how he would like to divide the treasure. Then all living pirates (including him) vote on the proposal. If at least half of the pirates alive vote for the proposal, then it is accepted, otherwise the pirate who made the proposal is killed and the process is repeated. The pirates are perfectly intelligent, logical and rational (see Blue Eyed Puzzle). Each pirate’s priorities are, in this order: Survival, wealth (getting the highest number of coins possible), bloodthirstiness (seeing as many pirates killed as possible, other than himself). In other words a pirate will always choose an outcome in which he lives over one in which he dies. Given two outcomes in which he lives, he will choose the one where he gets more coins. And given two outcomes in which he lives and gets the same number of coins he will choose the one in which the highest number of other pirates die. How will the gold coins be divided?

2.2 100个海盗(续)

加分项:如果有200个海盗,金币会怎么分割呢?

Note: For bonus points, how will the gold coins be divided if there are 200 pirates?

谜题, 100, XKCD, 囚徒, 海盗


第一题思路:当信号有限时,关键是重复,以及“领导”。

爱狗却养猫 at 2020-04-15
1

第二题思路:从p100海盗开始倒序思考。

爱狗却养猫 at 2020-04-15
2

先不考虑1.2和2.2,关于第一题的我的思路如下:

100个犯人讨论选出一个特别犯人,最终做出“所有人都被审讯过”的陈述的那个犯人也是他,我们把他记作1号犯人。因为审讯是完全随机的,所以并不知道1号犯人什么时候开始被审讯,不过没关系,1号犯人第一次被带去审讯室之前的所有审讯都不考虑。从1号犯人第一次被带去审讯室开始,他把灯打开。然后其他犯人被带入审讯室时,如果发现灯是亮的就把灯关掉,如果发现灯是关的就不要做任何操作。对于其他所有犯人来说,只有在第一次发现灯是亮的的时候把它关掉,之后再发现就不要做任何操作。

然后1号犯人开始计数,从他第一次打开灯开始,每当发现有人关掉了灯,就计数+1,同时再把关掉的灯打开。重复操作直至计数达到99,这意味着有99个犯人关过他开的灯,又因为每个犯人只能关一次灯,所以证明其他99人均已到过审讯室。在他第99次发现有人关掉他的灯的时候,他便可以放心的宣称:“所有人都已至少被审讯了一次。”

第二题思路:

这题的解法比较投机取巧,只能在绝对理想的条件下成立,现实中永远无法成立。目前有100个海盗,我们先简化该题试试看。先假设前面98个海盗都因为提案不被通过而被处决,只剩下最后两个海盗p99和p100,我们看看会发生什么。这个时候p99需要提供提案,p100来投票,这个情况就非常简单了,p99无论如何提案,p100都会无情否决,因为否决之后所有金币都是自己的了,同时又因为题干中给出“每个海盗的优先级为:首先活着,然后得到尽可能多的金币,最后希望尽可能多的其他海盗被杀。”所以就算p99的提案是把所有金币都给予p100,p100仍然会否决该提案,杀死p99。

现在我们再假设前面97个海盗都被投票处决了,只剩p98,p99和p100。p98需要提案。这时候p99的想法是,如果p98的提案被否决,轮到我提案我就死定了(参考上一段),所以无论p98如何提案,p99都会全力赞同,所以p98至少能拿到一半的投票支持,无论什么提案都会被通过。那么p98的提案当然是自己拿全部的金币,p99和p100拿0个金币。

现在我们再假设前面96个海盗都被投票处决了,只剩p97,p98,p99和p100。p97需要提案并得到至少两个支持。这时候p98的想法是,搞死p97我就赚大了(参考上一段),所以他一定投反对票。p99的情况比较特殊,按照题干描述他想多弄死一个海盗,但是如果有钱拿,他就会去拿钱。如果p98提案,p99为了自保一个金币也拿不到,这时如果p97可以给p99一个金币,就可以确保p99投票给他。p100的情况也比较特殊,他也想多弄死一个海盗p97,但在p98的提案中(参考上一段)他是一个金币也没有的,所以只要p97给他一个金币,他就马上转向支持他。所以p97的最优提案是:p98得到0个金币,p99得到1个金币,p100得到1个金币。

不断向前推,我们便可以得到下表: 海盗编号/p100的金币/p99的金币/p98的金币/p97的金币/p96的金币/p95的金币/p94的金币/p93的金币….. p100 /50 p99 /0 /50 p98 /0 /0 /50 p97 /1 /1 /0 /48 p96 /2 /0 /1 /0 /47 p95 /0 /1 /2 /1 /0 /46 p94 /1 /2 /0 /0 /1 /0 /46 p93 /2 /0 /1 /1 /0 /1 /0 /45 …

依此方法逆推便可发现海盗p(n)的提案的规律是:自己留下金币数为50 - roundup((100-n)/2),剩余的钱散发给后面的海盗以获得过半支持率。roundup()的意思是向上取整。(这个公式只对p99无效,因为他死定了。) 那么p1海盗的最优提案为:自己留下0个金币,50个金币全部发出去以求过半支持率保证自己存活。

unchained at 2020-04-16
3

前面回答的表乱了,重新贴一下:

海盗编号/p100的金币/p99的金币/p98的金币/p97的金币/p96的金币/p95的金币/p94的金币/p93的金币….. p100/50 p99/0/50 p98/0/0/50 p97/1/1/0/48 p96/2/0/1/0/47 p95/0/1/2/1/0/46 p94/1/2/0/0/1/0/46 p93/2/0/1/1/0/1/0/45 …

unchained at 2020-04-16
4

前面回答的表乱了,重新贴一下:

海盗编号/p100的金币/p99的金币/p98的金币/p97的金币/p96的金币/p95的金币/p94的金币/p93的金币…..

p100/50

p99/0/50

p98/0/0/50

p97/1/1/0/48

p96/2/0/1/0/47

p95/0/1/2/1/0/46

p94/1/2/0/0/1/0/46

p93/2/0/1/1/0/1/0/45 …

unchained at 2020-04-16
5

@unchained #4 同意!分析得很好。b( ̄▽ ̄)d

唯一一点异议,海盗投票通过的标准是“至少一半投票的海盗投赞成票,方案通过”。所以分的方案大概要“跳格”。

爱狗却养猫 at 2020-04-16
6

@unchained #4 膜拜大神……大神递归肯定学得好

小二 at 2020-04-16
7

@unchained #4 注意:所有仍然存活的海盗(包括提出方案者)对此方案投票。如果至少一半投票的海盗投赞成票

只剩两个时,P99怎么分都能通过。

因此对于 P98,只分给 P100 一个。 对于 P97,只分给 P99 一个。 对于 P96,分给 P98、P100 各一个。 …… 对于 P1,分给所有奇数号的各一个。

200 个海盗的情况,先死 100 个,再回到 100 个的情况。

星宿老仙 at 2020-04-16
8

1.2,(1)似乎无解。

(2),如果第一天审问的是计数者,只要令灯亮,情况与 1.1 一样;

如果第一天审问的不是计数者,此人的策略变成:如果初始状态为灯灭,策略同 1.1;如果初始状态为灯亮,关灯并不计入自己的关灯次数,换言之,第二次看到灯亮时要再灭一次,第三次以后不动。其他人策略不变。

星宿老仙 at 2020-04-16
9

#9 200个海盗的情况,不是先死 100 个,是先死 96 个。如下:

在 P1~P100 之上增加 P-99~P0,有:

对于 P0:将 50 个金币分给 P2~P100 的偶数号,加上自己得 51 票支持; 对于 P-1:将 50 个金币分给 P1~P99 的奇数号,加上自己得 51 票支持; 对于 P-2:怎么分都不够,必死; 对于 P-3:将 50 个金币分给 P-1~P99 的奇数号(缺一个),加上自己和 P-2,得 52 票支持; 对于 P-4 以后的:怎么分都不够,必死;

星宿老仙 at 2020-04-16
10

这个排版真感人。

星宿老仙 at 2020-04-16
11

@星宿老仙 赞👍。

关于1.1,应该有解,只要每人拨两次,计数者数到197次,即可保证每人至少一次,最多漏了一次。

爱狗却养猫 at 2020-04-16
12

@爱狗却养猫 #13 嗯,,这招不错。

11楼有点错,对于 P-3:应该是将 50 个金币分给 P0~P100 的偶数号(缺一个),加上自己和 P-2,得 52 票支持。如果分给奇数号,由于 P-2 的方案必不通过,只要杀了 P-3,直接回到 P-1,大多数奇数号没有损失。因此即使分到金币他们也不会支持 P-3。

星宿老仙 at 2020-04-16
13

@爱狗却养猫 #2 另外,什么是XKCD?

unchained at 2020-04-17
14

@unchained #15 这些谜题的来源为https://wiki.xkcd.com/irc/Puzzles。目前页面在修复隐私问题。xkcd 本身是一个 Geek 网站,有很多很有意思的漫画。https://xkcd.com

爱狗却养猫 at 2020-04-19
15