Nommez la main de poker
Étant donné cinq cartes, sortez le nom de la main de poker, qui sera l'une des suivantes:
High card
One pair
Two pair
Three of a kind
Straight
Flush
Full house
Four of a kind
Straight flush
Royal Flush
En cas de doute, reportez-vous aux règles sur http://en.wikipedia.org/wiki/List_of_poker_hands .
Contribution
5 cartes à partir d'arguments stdin ou de ligne de commande. Une carte est une chaîne de deux lettres sur le formulaire RS
, où R est le rang et S est la couleur. Les rangs sont 2
- 9
(cartes numérotées), T
(dix), J
(Jack), Q
(Reine), K
(Roi), A
(As). Les costumes sont S
, D
, H
, C
pour bêches, des diamants, des coeurs et des clubs respectivement.
Exemple de cartes
5H - five of hearts
TS - ten of spades
AD - ace of diamonds
Exemple d'entrée => sortie souhaitée
3H 5D JS 3C 7C => One pair
JH 4C 2C JD 2H => Two pair
7H 3S 7S 7D 7C => Four of a kind
8C 3H 8S 8H 3S => Full house
Règles
Victoires de code les plus courtes
modifier
En regardant bien jusqu'à présent! Je ne peux pas vraiment vérifier toutes les réponses, car je ne connais pas très bien ces langues et je n'ai pas de compilateurs / interprètes pour toutes, mais je soupçonne que tout le monde n'a pas pensé que les as peuvent être à la fois les plus élevées et les cartes les plus basses d'un Straight (flush) .
Réponses:
GolfScript (
209 208 207 206 200 199 199 197196 caractères)J'exploite la liberté offerte de modifier la capitalisation: mon Straight Flush et Royal Flush capitalisent tous les deux Flush afin de réutiliser le mot du simple flush.
Remarque: certaines versions antérieures étaient boguées: elles ne prenaient en charge full house que lorsque la paire était de valeur inférieure à la paire royal. Ils peuvent être corrigés en remplaçant l'espace séparant
- 0
par un$
.Démo
la source
.&
pour trouver les caractères distincts dans une chaîne est une astuce très utile.Entré avec une réponse de ma part :)
Python -
312301298Crée une liste 2x2 où les indices des deux dimensions sont des vérifications booléennes pour flush et straight. Dans les deux cas, nous vérifions s'il s'agit d'une quinte flush royale ou simplement d'une quinte flush. Pour ne pas flush et pas directement, nous vérifions les autres mains:
m
etn
détient le plus haut et le deuxième plus grand nombre de cartes de même rang; les noms des aiguilles sont stockés dans une liste d'index selonm
. Les sous-vérifications dans les valeurs de cette liste sont effectuées avecn
pour séparer une paire de deux paires et trois d'une sorte de maison.Edit: Merci Nolen Royality pour un total de 20 personnages enregistrés!
la source
m,n=g([c.count(x)for x in set(r)])
àm,n=g(map(c.count,set(r)))
?Rubis 1.9 (
427359348338296292)EDIT : fixe pour fonctionner avec des as faibles.
L'idée de base est de créer un tableau de la quantité de cartes dans chaque rang, de concaténer les chiffres en une chaîne, puis d'exécuter des expressions régulières pour voir quelle forme de main convient. Nous comptons le nombre de combinaisons distinctes pour déterminer s'il faut le comparer aux différentes couleurs (couleur, couleur droite, couleur royale) ou aux autres formes (tout le reste).
Prend les cartes comme des arguments de ligne de commande séparés, comme ceci:
la source
C, 454 caractères
Exécuter à partir de la ligne de commande avec des cartes comme arguments, par exemple ./a.out 8C 3H 8S 8H 3S
Version étendue, avec commentaires:
Modifications:
la source
Mathematica , 365
Voici mon point de vue sur la réponse de David Carraher.
Montré avec un espace blanc pour une certaine lisibilité.
Version une ligne:
la source
_
au lieu de{_,_,_,_}
K,
294295.
edit: Ajout de 1 char pour les lignes droites as-low
la source
Python
334,326322 caractèresJe sais que le dernier paquebot devient assez illisible, je mettrai une version non-golfée quand je serai satisfait de ma solution.
la source
GolfScript,
258250 caractèresLe programme attend une entrée sur STDIN comme indiqué ci-dessus et des sorties sur STDOUT. Vous pouvez tester le code vous-même .
Edit: incorporé les suggestions de w0lf.
la source
" of a kind"
une variable, car elle est utilisée deux fois."Straight"
AH KH 2C 3H 4H
est considéré comme un droit, mais devrait être une carte haute.Mathematica -
500494465 caractèresCette solution est basée sur une démonstration de poker par Ed Pegg, Jr. Dans cette version, les cartes sont traitées en interne comme des nombres dans
Range[2,14]
Exemples d'entrées, de sorties:
Remarques:
f: rincer
c: cartes (sans couleur)
s: droit
t: {cartes, suites}
ré:
la source
JH 4C 2C JD TH
?