La tâche est extraite d’une conférence du professeur MIT Devadas intitulée « Vous pouvez lire dans les pensées» . Une explication détaillée de l'astuce peut être trouvée dans la vidéo liée, ou dans ce document . Je vais essayer de l'expliquer en termes plus simples.
Il s’avère que cette invention a été inventée dans les années 1930 et qu’elle est connue sous le nom de "tour de cinq cartes de Fitch Cheney" .
Le truc va comme ça:
- Cinq cartes au hasard sont choisies parmi un jeu de cartes. Le public et votre assistant peuvent les voir, mais vous ne les voyez pas.
- Votre assistant (avec qui vous avez pratiqué) sélectionnera quatre de ces cartes et vous les montrera dans un ordre spécifique. Notez que la carte cachée n'est pas choisie au hasard parmi les 5 cartes. L'assistant choisit une / la carte qui fera fonctionner l'astuce.
- Vous en déduirez, en fonction des informations que vous pouvez collecter sur les quatre cartes, en quoi consiste la cinquième carte.
Comment?
Gardez les deux points suivants à l’esprit:
Lorsque vous choisissez 5 cartes au hasard, vous avez la garantie qu'au moins deux cartes ont la même couleur 1 .
L'image ci-dessous montre un cercle avec tous les rangs 2 . Comme il s’agit d’un cercle, il est possible de compter: J, Q, K, A, 2, 3 (comptage modulaire). Vous avez la garantie que la carte cachée n'a pas le même rang que la première, puisqu'elles auront la même couleur (expliqué ci-dessous). Il est toujours possible de choisir la première carte et les cartes cachées de telle sorte que la carte cachée soit entre 1 et 6 rangs plus élevé que la première (en comptant dans les cercles). Si la première carte est 1 , la carte cachée sera 2,3,4,5,6 ou 7 . Si la première carte est J , alors la carte cachée sera Q, K, A, 2,3 ou 4 et ainsi de suite.
L'algorithme:
La première carte: Cette carte aura la même couleur que la carte cachée. La carte sera également le point de référence que vous utiliserez pour déterminer le rang de la carte cachée.
Les 2ème, 3ème et 4ème cartes décodent une valeur comprise entre 1 et 6 . Nous appellerons les trois cartes S, M, L (la plus petite carte, la carte du milieu, la plus grande). Les valeurs seront codées comme ceci (ordre lexicographique):
S M L -> 1
S L M -> 2
M S L -> 3
M L S -> 4
L S M -> 5
L M S -> 6
Donc, si le rang de la première carte est 5 et que les trois cartes restantes ont le rang 4 Q 7 (elles sont commandées SLM ), alors la dernière carte a le rang 5 + 2 = 7 . Vous pouvez choisir si l'as doit être la carte la plus haute ou la plus basse, tant que c'est cohérent.
Si plusieurs cartes partagent le rang, la couleur déterminera l'ordre dans lequel C <D <H <S .
Format d'entrée:
Les quatre cartes seront données sous la forme H3 (trois de cœur), DK (roi des diamants), etc. Vous pouvez choisir de prendre l’inverse à l’inverse sous la forme 3H et KD .
L'entrée peut être sur n'importe quel format pratique, mais vous ne pouvez pas combiner la liste des couleurs dans une variable et la liste des rangs dans une autre. 'D5', 'H3' ..
et [['D',5],['H',3] ...
sont tous les deux OK, mais 'DHCH',[5,3,1,5]
n'est pas. Vous ne pouvez pas utiliser des numéros au lieu de lettres, à l' exception des T .
Sortie
La carte cachée, au même format que l’entrée.
Exemple
Faisons un pas à pas:
Input:
D3 S6 H3 H9
Nous savons que la carte cachée est un diamant, puisque la première carte est un diamant. Nous savons aussi que le rang est de 4,5,6,7,8 ou 9 puisque le rang de la première carte est de 3 .
Les cartes restantes sont commandées 6,3,9 ==> M, S, L , qui code la valeur 3 . La carte cachée est donc 3 + 3 = 6 de diamants, donc la sortie devrait être D6 .
Cas de test:
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
C'est du code-golf , donc la solution la plus courte dans chaque langue est gagnante. Les explications sont les bienvenues!
1 Il y a quatre couleurs ( C lubs, D iamonds, H earts et S pades).
2 Il y a 13 rangs, 2,3,4,5,6,7,8,9,10, J, Q, K, A . Vous pouvez choisir d’utiliser T au lieu de 10 .
la source
92427**3
et modifiezk+7
pourk+8
sauvegarder 1 octet: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
187**97
etk+15
fonctionne aussi, mais je suis certain que ce sont les seuls deux ensembles qui sont plus courts pour cet algorithme.1/34547
aveck+14
fonctionne également.Python 2 ,
143140138136127 127125124123121 octetsEssayez-le en ligne!
Les as sont élevés
Encode les trois cartes en trouvant leur position dans une liste triée des cartes (
0=smallest, 1=middle, 2=largest
):Ceci est converti en un entier en base 3 et multiplié par 3, puis divisé par 10:
Les différents encodages sont:
Enregistré:
la source
3
était intelligent! Bonne réponse :)0
à la fin et divise par 10, ce qui semble être équivalent.Gelée , 33 octets
Essayez-le en ligne!
Explication
La première ligne est niladique. Il donne une liste des 52 cartes
Dans le lien principal,
¢
appelle le résultat du premier lien qui est la liste des cartes.la source
1
pour l'as.APL (Dyalog Unicode) , SBCS 49 octets
Essayez-le en ligne!
Vue d'ensemble:
'CDHS'∘.,2↓⎕D,'TJQKA'
génère le produit externe, donc une matrice 2D avec(C2 C3 C4 ...), (D2 D3 D4 ...), ...
. Nous transposons ensuite cette matrice pour l’obtenir(C2 D2 H2 ...), ...
puis l’aplatissons.Merci à @ ngn pour le
2-⌊1.8⊥
, qui prend la commande de cartes (SML = 1 2 3) et les note (comme les 1 à 6 dans le PO).Explication du code:
la source
Rétine ,
218208 octetsEssayez-le en ligne!
Explication:
Remplace les As, les Valets, les Reines et les Rois par 1, 11, 12 et 13. Les deux premières lignes sont précédées de a
1
avant de la lettre et la dernière translittère du deuxième chiffre.Le
*
indique que cette étape ne doit pas modifier la chaîne de travail. Cela peut rendre la scène inutile, mais cela vous sera utile plus tard. La'
chaîne divise la chaîne de travail à chaque espace etG0
prend la première (pour trouver la première carte).Les deux premières lignes multiplient les nombres sur les cartes par 5, puis transformez-les en unaires (par exemple, 5 est représenté par _____), afin que nous puissions ajouter des montants plus petits pour les suites ultérieurement. La dernière ligne se divise en espaces et conserve les trois dernières cartes.
Ceci convertit les clubs, les diamants, les cœurs et les piques en 0, 1, 2 et 3 respectivement et transforme le nombre en unaire. Puisqu'il se trouve maintenant sur la partie numérotée de la carte, cela donnera une valeur unique à la carte, en déterminant à quelle hauteur.
Ceci trouve l'ordre des cartes et la valeur à ajouter à la première carte. Par exemple, sur la première ligne
/^(_+)¶\1_+/(
, les commandes dont la valeur médiane est supérieure à la première valeur sont comparées. Il crée une boucle if-else pour ce qu'il faut faire (car cet ordre correspond aux permutations 1, 2 et 4).K
marque une constante.Rappelez-vous plus tôt lorsque nous avions l'habitude
*
d'indiquer qu'une étape n'affecterait pas la chaîne de travail? C'est ici que nous l'utilisons. Cette étape est une étape de remplacement; il remplace le nombre à ajouter$+3-$&
.$+3
accède à la*
scène et obtient le costume et le numéro de la première carte,-
agit en tant que séparateur et$&
constitue le match. Donc, la chaîne de travail est maintenant{suit}{original number}-{number to add}
Cela transforme les deux nombres en unaires et les additionne.
La ligne du haut indique soit le nombre, soit le nombre - 13 (afin que nous n'obtenions pas les sorties de S16, par exemple). La ligne du bas ramène le nombre capturé en base 10 et le résultat est imprimé implicitement.
la source
Charbon de bois ,
6462 octetsEssayez-le en ligne! Le lien est vers la version verbeuse du code. Utilise
T
pour 10 et trieA
haut. L'indice de permutation n'a pas été très facilement décodé; un ordre de permutation différent m'aurait économisé au moins trois octets. Explication:Ajoutez 2 à tous les entiers de 0 à 7, puis concatentez-les et ajoutez un suffixe
TJQKA
aux cartes illustrées et à l'as. Cela permet d'économiser 2 octets sur un littéral de chaîne, même s'il s'avère que le fait d'avoirA
élevé aurait de toute façon enregistré un octet par compression de chaîne.Carte sur les cartes et les costumes, concatentant les deux ensemble. Dans la mesure où cela produirait normalement un tableau imbriqué, les résultats sont concaténés en une seule chaîne qui est ensuite divisée en paires de caractères.
Trouvez les positions des deuxième, troisième et quatrième cartes.
Calcule l'indice de permutation indexé 1. Les deux premières permutations ont la plus petite carte en premier; Ceci est testé via
⌕υ⌊υ
. Les deux autres paires de permutations sont différenciées selon que la carte la plus grande est en premier; Ceci est testé via⌕υ⌈υ
. Les opérations logiques et arithmétiques mappent ensuite ces tests sur les valeurs0
,2
et4
; ceci est ensuite augmenté en1
fonction de la comparaison entre la troisième et la quatrième carte, testée via‹⊟υ⊟υ
. Enfin, l'index est incrémenté pour donner le codage souhaité.Multipliez par 4 la distance entre les cartes de la même couleur, ajoutez la position de la première carte, indexez et imprimez le résultat cycliquement.
la source
Python 2 , 147 octets
Essayez-le en ligne!
la source
Pyth, 42 octets
Vraiment moche...
Essayez-le en ligne: Demontration ou Test Suite
la source
J , 68 octets
Essayez-le en ligne!
Remarque: -3 sur les octets TIO car ils
f=.
ne comptent pas. Je vais essayer de jouer plus au golf et ajouter une explication demain.la source
JavaScript (Node.js) , 124 octets
Essayez-le en ligne!
JavaScript (Node.js) , 125 octets
Essayez-le en ligne!
la source
T-SQL, 211 octets
L'entrée est une variable de table. En utilisant T pour 10, les as sont faibles
Format pour le classement / la correspondance des cartes KH, 6D, TS
Essayez - le en ligne ungolfed
Notez comment la valeur SML (12-17) est calculée:
Logiquement, S, M, L (1,2,3) est converti en une valeur numérique
En multipliant par 3, la racine carrée arrondie devient un joli nombre séquentiel.
la source
05AB1E , 37 octets
La réponse de Port of @dylnan 's Jelly , mais malheureusement, 05AB1E ne possède pas l'indice de permutation intégré ..
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Voir ce conseil 05AB1E (section Comment compresser des chaînes ne faisant pas partie du dictionnaire? ) Pour comprendre pourquoi
.•3u§•
est"jqka"
et.•ôì•
est"cdhs"
.la source