Ce défi consiste à marquer une main Cribbage. Si vous ne jouez pas à Cribbage, vous devez apprendre. Nous jouons avec un jeu de poker standard, et une main se compose de quatre cartes plus la "carte up". Il existe deux types de main: normale et une «main de crèche».
Les cartes sont disponibles dans le format vs
où v
est l' une: A23456789TJQK
(T pour dix) et s
est l' un des SCDH
. Une main sera donnée sous la forme (par exemple)
AS 2D 3H JS | 4S
où 4S
est la carte up. Une main de berceau aura le format
JD 3C 4H 5H | 5S !
Les cartes de visage ont une valeur de 10 et l'as a une valeur de 1. Le score est effectué comme suit.
- Quinze: pour chaque sous-ensemble de cinq cartes dont la somme est de 15, ajoutez deux points.
- Paires: pour chaque paire de cartes de même rang (pas de valeur), ajoutez deux points.
- Courses: pour chaque course maximale de cartes consécutives d'une longueur supérieure à 2, ajoutez la longueur de la course en points.
- Flush: si les cinq cartes sont de la même couleur, ajoutez cinq points. Sinon, si toutes les cartes sauf la carte up sont de la même couleur, ajoutez quatre points. S'il s'agit d'une main de berceau, la variante à quatre points n'est pas comptée.
- Nobs: s'il y a un jack en main avec la même couleur que la carte up, ajoutez un point.
Remarques:
Les triples et les quatuors ne sont pas spéciaux - il y a trois paires dans un triple, donc un triple vaut 6 points.
Les courses peuvent se chevaucher. Par exemple,
AS AH 2D 3C | 2C
(un double double run) a quatre runs de longueur 3 et deux paires, vaut donc 3 + 3 + 3 + 3 + 2 + 2 = 16 points.Seules les courses maximales sont comptées, donc
KS QD JD TC | 9S
valent 5 points, car c'est une course de 5. Les sous-courses ne sont pas comptées.
Règle de la maison:
Il est impossible de marquer 19 points dans une main. Au lieu de zéro, indiquez un score de 19.
Exemples:
5S 5H 5D JS | KS
21
AS 2D 3H JS | 4S !
9
JD 3C 4H 5H | 5S
12
9S 8S 7S 6S | 5H !
9
9S 8S 7S 6S | 5H
13
8D 7D 6D 5D | 4D !
14
8D 7D 6D 5D | 4D
14
AD KD 3C QD | 6D
19
C'est le golf de code. La solution la plus courte l'emporte.
Réponses:
GolfScript,
187178174 caractèresComme je n'ai jamais joué au cribbage, je ne connais pas de trucs de notation fantaisistes. J'ai donc pensé que la seule façon de concourir (au moins un peu) était d'utiliser un langage de golf. Le code est assez simple GolfScript, les cas de test peuvent être trouvés ici .
Le code d'une manière plus lisible ( reformaté et ungolfed un peu ):
Edit: logique changée pour les quinze et les couleurs.
la source
C, 364
388caractèresC'est grand et moche (mais pas aussi grand qu'autrefois):
(Des sauts de ligne ont été ajoutés pour faciliter la lecture; ils ne sont pas inclus dans le décompte ci-dessus.)
La description du problème ne spécifiait pas si le code avait besoin de vérifier les entrées non valides, donc naturellement j'ai supposé que le programme était libre de se comporter mal à volonté si l'entrée, par exemple, contenait des espaces supplémentaires.
Voici la version non golfée:
la source
Rubis 1.9,
359356C'est beaucoup trop long - presque autant que la solution C.
la source
Quelque chose pour commencer .. Ruby,
422 365 355352Légèrement non golfé:
Tests unitaires pour la version golfée:
Résultats:
la source
Python, 629 caractères
Je poste le mien uniquement parce que personne d'autre ne l'a fait. C'est assez long :(
la source
print s or 19
? Je pense que vous pouvez également utiliser Python 3.x et raser 3 autres caractères (raw_input
àinput
, puisprint s or 19
àprint(s or 19)
).Python 2,
606584 octetsSauvegardé 22 octets grâce au golf de Jo King .
Essayez-le en ligne!
Légèrement plus court que grc la réponse , et prend un itinéraire différent pour y arriver.
Explication:
Explication de la logique d'exécution spécifiquement:
la source
if
s pour arriver à 584 octetsStax , 106 octets
Exécutez et déboguez en ligne!
Bonus pour CP437: Voir le symbole de ces costumes dans le Stax emballé? Dommage que les clubs n'apparaissent pas ...
L'équivalent ASCII est
Explication
la source