タスクはDevadas教授によるMIT講義「You can mind read minds」から取得されます。トリックの詳細な説明は、リンクされたビデオまたはこのドキュメントに記載されています。それをより簡単な言葉で説明しようとします。
これは1930年代に発明されたもので、「フィッチチェイニーの5つのカードトリック」として知られています。
トリックは次のようになります。
- カードのデッキから5つのランダムなカードが選択されます。観客とあなたのアシスタントはそれらを見ることができますが、あなたは見ません。
- アシスタント(練習した相手)は、これらのカードのうち4枚を選択し、特定の順序で表示します。非表示のカードは、5枚のカードからランダムに選択されるわけではないことに注意してください。アシスタントは、トリックを機能させるカードを選びます。
- 4枚のカードから収集できる情報に基づいて、5枚目のカードを推測します。
どうやって?
次の2つの点に注意してください。
5枚のランダムなカードを選択する場合、少なくとも 2枚のカードが同じスーツを持っていることが保証されます1。
以下の画像は、すべてのランク2の円を示しています。円であるため、J、Q、K、A、2、3(モジュラーカウント)をカウントできます。隠されたカードは、同じスーツ(以下で説明)になるため、最初のカードと同じランクではないことが保証されます。最初のカードと隠しカードは、隠しカードが最初よりも1から6ランク高いように選択することが常に可能です(丸で数える場合)。最初のカードが1の場合、非表示のカードは2,3,4,5,6または7になります。最初のカードがJの場合、非表示のカードはQ、K、A、2、3、または4などになります。
アルゴリズム:
最初のカード:このカードには、隠しカードと同じスーツがあります。このカードは、隠しカードのランクを計算するときに使用する基準点にもなります。
2番目、3番目、および4番目のカードは、1〜6の範囲の値をデコードします。3枚のカードを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で、残りの3つのカードのランクが4 Q 7(それらはSLMに注文されている)である場合、最後のカードのランクは5 + 2 = 7です。です。一貫性がある限り、エースが最高か最低かを選択できます。
複数のカードがランクを共有している場合、スーツが順番を決定します(C <D <H <S)。
入力形式:
4枚のカードは、H3(ハートの3つ)、DK(ダイヤモンドの王)などとして与えられます。代わりに、3HおよびKDのように入力を選択することもできます。
入力は任意の便利な形式にすることができますが、ある変数のスーツのリストと別の変数のランクのリストを組み合わせることはできません。'D5', 'H3' ..
そして、 [['D',5],['H',3] ...
両方OKですが、'DHCH',[5,3,1,5]
ではありません。Tを除き、文字の代わりに数字を使用することはできません。
出力
入力と同じ形式の隠しカード。
例
ウォークスルーをしましょう:
Input:
D3 S6 H3 H9
最初のカードはダイヤモンドなので、隠されたカードはダイヤモンドであることを知っています。また、最初のカードのランクが3であるため、ランクが4,5,6,7,8または9であることもわかっています。ます。
残りのカードは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
これはcode-golfであるため、各言語で最も短いソリューションが優先されます。説明が奨励されています!
図1は、 4つのスーツ(存在するCの lubs、Dの iamonds、Hの earts及びSの padesを)。
2 13ランク、2,3,4,5,6,7,8,9,10、J、Q、K、Aがあります。10の代わりにTを使用することもできます。
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