Mahjong est un jeu de tuiles qui est immensément populaire en Asie. Il se joue généralement avec quatre joueurs, et le but du jeu est d'être la première personne à terminer une main valide en utilisant les tuiles. Dans le mahjong, il y a trois combinaisons de tuiles plus des tuiles d'honneur - pour ce défi, nous ne considérerons que les mains formées à l'aide de tuiles d'une seule combinaison.
Les tuiles sont numérotées de 1
à 9
, et il y a exactement quatre copies de chaque tuile. Une main valide se compose de quatre ensembles de trois et d'une paire, pour un total de quatorze tuiles.
Un ensemble de trois peut être soit:
- Un triplet, trois de la même tuile (par exemple
444
), ou - Une séquence de trois tuiles consécutives (par exemple
123
ou678
pas357
). Les séquences ne sont pas bouclées (elles ne sont donc pas912
valides).
Une paire est simplement deux tuiles identiques (par exemple 55
).
Le défi
Étant donné une main valide de quatorze tuiles, déterminez son score en fonction des critères suivants:
Condition Description Point/s
-------------------------------------------------------------------------------
Straight Contains the sequences 123 456 789 1
Identical sequences Contains two identical sequences 1
All simples Only 2-8, no 1s or 9s 1
All sequences All sets of three are sequences 1
All triplets All sets of three are triplets 2
Flush Single-suit hand (always applies) 5
(Le score ici est basé sur les règles du mahjong japonais, mais fortement simplifié pour rendre la spécification moins salissante.)
Le score d'une main est la somme des points pour les conditions qu'elle remplit. Si une main peut être décomposée de plusieurs façons, prenez la décomposition ayant le score le plus élevé.
La main d'entrée est garantie pour être valide, c'est-à-dire quatorze tuiles de 1 à 9 et chaque tuile apparaissant au plus quatre fois, et peut être supposée être déjà triée. L'entrée est une liste de chiffres (sous forme de chaîne ou d'une seule liste plate d'entiers) via STDIN, argument de fonction ou ligne de commande. La sortie peut être vers STDOUT ou renvoyer une valeur.
Cas de test
22233355777888 -> 8 # 222 333 55 777 888, flush + all simp. + all trip.
11112345678999 -> 6 # 111 123 456 789 99, flush + straight
11123456788999 -> 5 # 111 234 567 88 999, flush only (no straight)
23344455566788 -> 7 # 234 345 456 567 88, flush + all simp. + all seq.
33334444555566 -> 8 # 33 345 345 456 456, flush + all simp. + all seq. + identical seq.
11122233377799 -> 7 # 111 222 333 777 99, flush + all trip. (no identical seq.)
12344556678889 -> 8 # 123 456 456 789 88, flush + all seq. + straight + identical seq.
11344556678999 -> 5 # 11 345 456 678 999, flush only (no identical seq.)
22233344455566 -> 8 # 222 333 444 555 66, flush + all simp. + all trip.
11112233344555 -> 5 # 111 123 234 345 55, flush only
Pour le cinquième exemple, malgré deux paires de séquences identiques, une seule doit être présente pour atteindre le point. La décomposition 345 345 345 345 66
aurait le même score, tandis que les 333 345 444 555 66
scores seraient pires.
Notation
Il s'agit de code-golf , donc la solution dans le moins d'octets est gagnante. Des échappatoires standard s'appliquent.
Défi connexe: Qu'attendez-vous? (Un mahjong solveur)