该任务摘自Devadas教授在麻省理工学院的一次演讲,名为“ 您可以读懂思想”。有关此技巧的详细说明,请参见链接的视频或本文档。我将尝试用更简单的术语进行解释。
事实证明,这是1930年代发明的,被称为“惠誉·切尼的五张牌把戏”。
诀窍如下:
- 从一副纸牌中选择五张随机纸牌。观众和您的助手可以看到他们,但您却没有。
- 您的助手(您与之练习过的助手)将选择其中的四张卡片,并按特定顺序显示给您。请注意,隐藏卡不是从5张卡中随机选择的。助手选择一张将使技巧起作用的卡。
- 您将根据从四张卡中收集到的信息推断出第五张卡是什么。
怎么样?
请记住以下两点:
选择5张随机卡片时,可以确保至少有两张卡片具有相同的花色1。
下图显示了一个等级为2的圆。由于是圆形,因此可以计数:J,Q,K,A,2、3(即模数)。您可以确保隐藏的卡与第一张卡的等级不同,因为它们的西装相同(如下所述)。总是可以选择第一张纸牌和隐藏的纸牌,以使隐藏的纸牌比第一张纸牌高1至6级(按圆圈数时)。如果第一张卡为1,则隐藏的卡将为2、3、4、5、6或7。如果第一张卡是J,那么隐藏的卡将是Q,K,A,2,3或4,依此类推。
算法:
第一张卡:此卡与隐藏卡的西装相同。找出隐藏卡的等级时,该卡也将用作参考点。
第二张,第三张和第四张卡解码范围为1 ... 6的值。我们将这三个卡称为S,M,L(最小卡,中间卡,最大卡)。值将按以下方式编码(字典顺序):
S M L -> 1
S L M -> 2
M S L -> 3
M L S -> 4
L S M -> 5
L M S -> 6
因此,如果第一张牌的等级为5,而其余三张牌的等级为4 Q 7(它们被订购SLM),那么最后一张牌的等级为5 + 2 = 7。您可以选择ace是最高牌还是最低牌,只要它是一致的即可。
如果几张牌的排名相同,则西装将确定顺序,其中C <D <H <S。
输入格式:
这四张牌将分别为H3(三颗心),DK(钻石之王)等。您可以选择将输入改为3H和KD。
输入可以采用任何方便的格式,但是您不能将一个变量中的西服列表与另一个变量中的排名列表结合在一起。'D5', 'H3' ..
并且 [['D',5],['H',3] ...
都是OK的,但'DHCH',[5,3,1,5]
并非如此。除了T,您不能使用数字而不是字母。
输出量
隐藏的卡,与输入的格式相同。
例
让我们做一个演练:
Input:
D3 S6 H3 H9
我们知道隐藏的卡是钻石,因为第一张卡是钻石。我们也知道排名是4,5,6,7,8或9,因为第一张牌的排名是3。
其余卡按6,3,9 ==> M,S,L的顺序排序,对值3进行编码。因此,隐藏的卡是3 + 3 = 6的菱形,因此输出应为D6。
测试用例:
C3 H6 C6 S2
C9 # The order is LMS (H6 > C6, and 2 < 6). 3+6=9
SQ S4 S3 ST # (ST = S10. Format is optional)
S2 # The order is MSL. 12+3=2
HA CA DA SA
H2 # The order is SML. 14+1=2
这是代码高尔夫球,因此每种语言中最短的解决方案将获胜。鼓励解释!
1有四个套装(Ç鲁布斯,d iamonds,ħ电子艺术和小号的PAdES)。
2共有13个等级,即2,3,4,5,6,7,8,9,10,J,Q,K,A。您可以选择使用T而不是10。
92427**3
并修改k+7
以k+8
保存1个字节:a=>(k='A23456789TJQK'+92427**3)[[[r,s],...x]=a.map((c,i)=>[k.search(c[0])+10,c[1],i]),(r-k[x.sort().map(c=>k=k*2|c[2])|k+8])%13]+s