Écrivez le code pour déterminer qui remporte un tour de quatre cartes dans un jeu de pique . Le moins d'octets gagne.
L'entrée est une chaîne qui répertorie les quatre cartes jouées en séquence comme TH QC JH 2H
(Ten of Hearts, Queen of Clubs, Jack of Hearts, Two of Hearts). Une carte est donnée par deux personnages: une couleur de CDHS
et une valeur de 23456789TJQKA
. Vous êtes assuré que l'entrée est valide et que les cartes sont distinctes.
Vous devez sortir un nombre 1, 2, 3 ou 4 pour le vainqueur de l'astuce. Dans l'exemple TH QC JH 2H
, la prise de cœur remporte le tour, vous devez donc sortir 3.
Vos entrées et sorties doivent être exactement comme décrites, sauf que les retours à la ligne de fin sont facultatifs.
Voici les règles de Spades pour gagner un tour. La carte gagnante est la carte la plus élevée des quatre, avec quelques mises en garde. La pique est le costume d'atout , donc toute bêche surpasse tout non-pique. La couleur de la première carte jouée est la couleur principale , et seules les cartes de cette couleur ou des piques sont éligibles pour remporter le tour. Les cartes de la même couleur sont comparées par leurs valeurs, qui sont données en ordre croissant au fur et à mesure 23456789TJQKA
.
Cas de test:
TH QC JH 2H
3
KC 5S QS 9C
3
QD 2D TD 5D
1
9S 5D AD QS
4
3D 4C 3H JH
1
9S 4S TS JS
4
5H 9H 2C AD
2
5S 4C 3H QD
1
2H 2S KH AH
2
la source
.e
choses en valent la peine - l'utilisationo
est d'un caractère plus court que je le pense..e
solution 28. Mais la solution 27 s'est terminée par un)
et avait donc également 28 octets. : oups:+@z1"KTA"
à"KTAZ"
, mais au lieu d'utiliser les chaînes directement utiliséesJ"KTAZ"
au début et+@z1J
àJ
.X
facultatif (uniquement si a et b sont des chaînes). Mais je ne suis pas vraiment sûr, siXab)
devrait évaluerXab_b
(b inversé, serait bien pour des trucs commeXa"</\>"
) ouXab+tbhb
(b décalé). Quelle est votre préférence?CJam,
3433 octetsAlgorithme
La logique est simple. J'ai un tri personnalisé en cours, dans lequel je donne d'abord la priorité au deuxième personnage représentant la combinaison. En cela, Spades obtient la priorité la plus élevée, puis la première suite lancée. Reste tous
-1
. Ensuite, je trie le premier caractère en échangeantT
avecA
etQ
avecK
pour avoir un tri lexical.Explication du code
Tout d'abord, voyons quel est l'ordre lexical des valeurs faciales des cartes:
Ainsi, tous les nombres sont à la bonne position.
J
est également à la bonne position. Nous devons échangerK
etQ
etJ
etA
pour obtenir l'ordre lexical.Essayez-le en ligne ici
la source
JavaScript (ES6), 112
Parcourez la liste et renvoyez la position de la valeur la plus élevée trouvée.
Exécutez l'extrait de code pour tester (dans Firefox)
la source
Perl, 73 octets
Essayez moi .
Convertit les noms de cartes afin que l'ordre des valeurs du jeu suive l'ordre alphabétique, puis sélectionne le plus élevé par tri et le recherche dans la chaîne d'origine pour la position.
la source
Rubis, 59 + 2 = 61
Avec des drapeaux de ligne de commande
na
, exécutezla source
J, 47 octets
Usage:
Méthode:
'S[second char of input]AKQJT9876543'
chaîne. Les caractères non trouvés obtiennentlast position + 1
implicitement la valeur . Les autres caractères ont beaucoup moins de valeur (value=(16-position)!
).TH_
QC_
9S_
et8S
).(J ne peut malheureusement pas comparer directement les caractères ou les chaînes. Il ne peut que vérifier leur égalité, ce qui a exclu d'autres approches pour ce défi.)
Essayez-le en ligne ici.
la source
C #, 237
Comment ça marche: Itérer chaque main pour calculer la "valeur" de la carte .. stocker l'indice le plus valorisé. Une valeur de cartes est déterminée comme le rang de la carte multiplié par 0 si ce n'est pas une bêche ou la couleur d'ouverture, 1 si c'est la couleur d'ouverture et 9 si c'est une bêche mais pas la couleur d'ouverture. (9 choisi b / c 2 * 9 = 18> A = 14 & 9 est un seul caractère)
la source
Pyth,
3633 octetsApproche assez simple, utilise le tri avec une fonction de clé personnalisée, puis trouve l'index de la valeur la plus élevée.
la source
e
), vous pouvez obtenir le dernier élément, donc trouver la valeur la plus élevée est juste un tri suivi de l'obtention du dernier élément.Pyth, 31 octets
Essayez-le ici.
Comment ça fonctionne:
La bonne façon de lire cette procédure est de l'arrière vers l'avant. La procédure trie la carte souhaitée à la fin de la liste, puis la retire et trouve son index dans la liste d'origine.
cz
: Cela génère la liste des chaînes de cartes.c
, chop, est normalement une fonction binaire (arité 2), mais lorsqu'il est appelé sur une seule entrée, sert de.split()
méthode de chaîne.S
: Ceci applique le comportement de tri normal, qui trie les cartes numérotées inférieures avant les cartes supérieures.ox"TJQKA"hN
: Ceci trie les cartes par l'index (x
) dans la chaîne"TJQKA"
de la première lettre de la carte (hN
). Pour les cartes avec des chiffres, la première lettre est introuvable, donnant le résultat-1
. La fonction de tri de Pyth étant stable, l'ordre des cartes numérotées n'est pas affecté.o}@z1Z
: Ensuite, nous ordonnons si la couleur de la première carte jouée (@z1
) est dans la carte en question. PuisqueTrue
trie derrièreFalse
, cela envoie les cartes de la couleur principale à l'arrière.o}\SN
: C'est le même que le tri précédent, mais il trie si la lettreS
est dans la carte, envoyant des piques à l'arrière.hxczde
: Ceci extrait la dernière carte triée de cette façon (e
), trouve son index dans la liste des cartes (xczd
) et incrémente de 1 (h
), donnant l'emplacement du joueur souhaité.la source