Le tour de magie de 5 cartes implique un magicien dont l'assistant leur donne 4 cartes montrées et une cachée, dans cet ordre, et le magicien doit deviner la cachée.
AVERTISSEMENT: Solution ci-dessous! Partez maintenant ou gâtez-vous avec.
La solution
L'astuce ici est que les cinq cartes sont données dans un ordre spécifique !
sont les 5 cartes dans l'ordre donné.
est le numéro de carte de dans (ordre des nombres).
, où est un numéro de carte et est un nombre entier, est égal au nombre de cartes étapes à droite de dans , encapsulant au début si nécessaire.
est la combinaison de dans (ordre des combinaisons).
, où est un numéro de carte et est une couleur, désigne la carte avec le numéro de carte et la couleur .
, où et sontcartes, est vrai si «de costume est à la gauche de HABIT en , ou leurs combinaisons sont égales et « numéro de carte de est à gauche de » s numéro de carte en .
, où et sont des cartes, est vrai si est faux.
, où , et sont des cartes, est l'indice de permutation de cet ordre d'entre elles, spécifié par le tableau ci-dessous:
La solution à l'astuce magique à 5 cartes est le problème:
Le défi
Jusqu'ici tout va bien. Cependant, faire le calcul spécifié ci-dessus est déjà demandé ici . Au lieu de cela, votre défi est, étant donné les 5 cartes dans aucun ordre spécifique, de les commander correctement. Cela signifie que les quatre premières cartes de la sortie représenteront la cinquième. En d'autres termes, soyez l'assistant. Exigences:
- .
- (c'est-à-dire que cela doit être possible).
Exemple
Considérons l'ensemble 7H,2D,6D,5C,6C
. Tout d'abord, nous prenons les 25 paires:
7H,7H 7H,2D 7H,6D 7H,5C 7H,6C
2D,7H 2D,2D 2D,6D 2D,5C 2D,6C
6D,7H 6D,2D 6D,6D 6D,5C 6D,6C
5C,7H 5C,2D 5C,6D 5C,5C 5C,6C
6C,7H 6C,2D 6C,6D 6C,5C 6C,6C
Ensuite, on retire évidemment les 5 paires qui contiennent la même carte deux fois, elles n'existent pas dans un seul deck:
7H,2D 7H,6D 7H,5C 7H,6C
2D,7H 2D,6D 2D,5C 2D,6C
6D,7H 6D,2D 6D,5C 6D,6C
5C,7H 5C,2D 5C,6D 5C,6C
6C,7H 6C,2D 6C,6D 6C,5C
Ensuite, puisque les costumes doivent être les mêmes, différents costumes dans une paire est un non-non:
2D, 6D 6D, 2D 5C, 6C 6C, 5C
Enfin, nous vérifions s'il est possible de passer de la première carte à la seconde en ajoutant au plus 6, en supprimant la moitié des paires restantes:
2D, 6D 5C, 6C
Nous avons maintenant les paires valides: 2D,6D
et 5C,6C
. La première carte de chaque paire est la carte 1, tandis que la dernière est la carte 5.
Nous allons aller 5C,6C
ici pour plus de facilité. L'ensemble est 7H,2D,6D,5C,6C
, donc, retirer les 2 cartes de la paire que nous avons choisie, nous l'avons 7H,2D,6D
. Ces cartes représenteront 6 - 5 = 1
, nous devons donc les commander comme "min, mid, max". 7H > 2D < 6D < 7H
, ou tout simplement 2D < 6D < 7H
, donc nous avons maintenant 2D,6D,7H
.
La dernière étape consiste à mettre tout cela ensemble, donc notre résultat sera 5C,2D,6D,7H,6C
.
Clarifications
- Vous pouvez utiliser à la
10
place deT
. - Vous pouvez utiliser l' un
♠♥♦♣
,♤♡♢♧
ou au♠♡♢♣
lieu deCDHS
, respectivement. - C'est le code-golf , le code le plus court l'emporte.
Cas de test
Vous pouvez générer une ou plusieurs des solutions valides incluses pour chaque scénario de test.
8S,TD,5C,QS,TS -> 8S,5C,QS,TD,TS
... 8S,TD,TS,5C,QS
... TS,5C,8S,TD,QS
JD,KH,4S,9D,8S -> 9D,KH,8S,4S,JD
... 4S,JD,KH,9D,8S
4H,4D,TH,KH,2C -> 4H,KH,4D,2C,TH
... TH,4D,2C,4H,KH
... KH,4D,TH,2C,4H
3S,KS,8S,KH,9H -> 9H,8S,KS,3S,KH
... 3S,KS,9H,KH,8S
... 8S,3S,9H,KH,KS
... KS,KH,9H,8S,3S
KH,TS,3C,7H,JD -> 7H,TS,JD,3C,KH
4C,KC,TD,JD,QS -> KC,JD,QS,TD,4C
... TD,4C,KC,QS,JD
AC,5H,8D,6D,8S -> 6D,AC,8S,5H,8D
AS,TC,3S,2H,9C -> 9C,2H,AS,3S,TC
... AS,9C,2H,TC,3S
4C,JS,AS,8H,JC -> JC,JS,AS,8H,4C
... JS,JC,4C,8H,AS
4H,QS,TH,QC,AC -> QC,4H,QS,TH,AC
... 4H,QS,QC,AC,TH
la source
Réponses:
Node.js ,
190186180 octetsEssayez-le en ligne!
Comment?
Identifier et comparer les numéros de carte
"NS"
Génération des permutations de l'entrée
Tester les combinaisons
Le premier test évident consiste à s'assurer que la première et la dernière carte sont de la même couleur. Nous rejetons la permutation si elles ne sont pas égales.
Tester la distance
Nous calculons la distance entre le premier numéro de carte et le dernier numéro de carte avec:
Ce test repose sur le fonctionnement de l'
sort()
algorithme de Node.js.sort()
Prenons le code suivant:
Maintenant, si nous le faisons:
Chaque permutation génère un masque de bits unique, qui est mappé sur une distance unique:
Pour tout mettre ensemble, nous avons le test suivant:
la source
Python 3 ,
260 248232 octetsEssayez-le en ligne!
-12 octets grâce à Eric l'Outgolfer
-14 octets en supprimant une liste de compréhension
la source
Propre ,
225220209 octetsEssayez-le en ligne!
En tant que fonction composée
:: [[Char]] -> [[Char]]
, avec quelques assistants.Étendu:
la source
Rubis , 175 octets
Essayez-le en ligne!
Une fonction lambda prenant un tableau de cartes comme chaînes
Commenté
la source
Gelée , 41 octets
Un lien monadique acceptant une liste de listes de caractères renvoyant une liste de tous les arrangements valides dans le même format.
Essayez-le en ligne! (le pied de page formate le résultat sous forme de grille pour éviter l'impression de cassage implicite effectuée par le code du lien lorsqu'il est exécuté en tant que programme complet)
Ou consultez une suite de tests .
Je soupçonne furtivement qu'une autre approche sera beaucoup plus concise. Je devrai revoir ce défi plus tard!
... hmm, j'ai eu un autre coup de fouet et j'ai obtenu un autre 41 octets ( test ):
la source