Idée grâce à @ MartinBüttner à partir d'une discussion dans le chat
Mahjong est un jeu de tuiles qui est extrêmement 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. Pour ce défi, nous considérerons une version simplifiée du jeu - PPCG mahjong.
Dans le mahjong PPCG, il y a trois combinaisons - m
, p
et s
- et les tuiles sont numérotées de 1
à 9
. Il y a exactement quatre copies de chaque tuile, et les tuiles sont indiquées par son numéro suivi de sa couleur (par exemple 3m
, 9s
).
Une main de mahjong PPCG terminée se compose de quatre ensembles de trois et d'une paire, pour un total de 14 tuiles.
Un ensemble de trois peut être soit:
- Trois de la même tuile (par exemple
4s 4s 4s
, mais pas4m 4p 4s
), ou - Une séquence de trois tuiles consécutives dans le même costume (par exemple
1s 2s 3s
ou6p 7p 8p
mais pas3s 4m 5m
ou3p 5p 7p
). Les séquences ne sont pas bouclées (elles ne sont donc pas9m 1m 2m
valides).
Une paire est simplement deux tuiles identiques (par exemple 5s 5s
).
Le défi
Votre programme recevra une main séparée par des espaces de 13 tuiles, chaque tuile n'apparaissant pas plus de quatre fois. Vous pouvez écrire soit un programme complet, soit une fonction qui prend une chaîne.
Votre tâche consiste à trouver toutes les tuiles 14ème possibles ("attentes") qui, une fois ajoutées à la main, formeraient une main de mahjong PPCG terminée. Les tuiles en sortie doivent être séparées par des espaces, mais peuvent être dans n'importe quel ordre. Les espaces blancs avant ou arrière sont autorisés.
Votre programme doit s'exécuter dans un délai raisonnable, pas plus d'une minute.
Exemples
Input: 1m 1m 1m 4s 4s 4s 7p 7p 7p 3m 3m 3m 9s
Output: 9s
Input: 1m 1m 1m 3m 3m 3m 5m 5m 5m 2s 3s 7p 8p
Output:
Input: 1m 2m 2m 3m 3m 3m 3m 4m 1s 1s 9s 9s 9s
Output: 1s
Input: 1m 1m 1m 2m 3m 4m 5m 6m 7m 8m 9m 9m 9m
Output: 1m 2m 3m 4m 5m 6m 7m 8m 9m
Input: 1m 1m 1m 5p 2m 3m 5p 7s 8s 5p 9s 9s 9s
Output: 1m 4m 6s 9s
Dans le premier exemple, 1m 4s 7p 3m
tous forment des triplets existants, laissant le seul 9s
former une paire.
Dans le deuxième exemple, le 2s 3s
et 7p 8p
ne peut former que des séquences et les tuiles restantes ne peuvent former que des triplets. Par conséquent, aucune paire ne peut être formée et il n'y a pas de sortie.
Dans le troisième exemple, la main se divise en 1m2m3m 2m3m4m 3m3m 1s1s 9s9s9s
. Normalement, ce serait une attente 3m 1s
, mais comme les quatre 3m
ont été utilisés, la seule attente disponible est 1s
.
Dans le quatrième exemple, toutes les m
tuiles complètent la main. Par exemple, pour 1m
, on pourrait avoir 1m1m1m 1m2m3m 4m5m6m 7m8m9m 9m9m
une main terminée.
Essayez de trouver le reste du quatrième exemple et du cinquième exemple :)
Notation
C'est du code-golf , donc la solution dans le moins d'octets l'emporte. Des échappatoires standard s'appliquent.