Idee danke an @ MartinBüttner aus einer Diskussion im Chat
Mahjong ist ein Kachelspiel, das in Asien sehr beliebt ist. Es wird normalerweise mit vier Spielern gespielt, und das Ziel des Spiels ist es, die erste Person zu sein, die eine gültige Hand mit den Plättchen abschließt. Für diese Herausforderung werden wir eine vereinfachte Version des Spiels betrachten - PPCG Mahjong.
In PPCG Mahjong gibt es drei Anzüge - m
, p
und s
- und die Fliesen sind nummeriert von 1
zu 9
. Es gibt genau vier Kopien von jeder Platte, und die Fliesen sind gekennzeichnet durch ihre Nummer von seinem Beispiel gefolgt (zB 3m
, 9s
).
Eine fertige PPCG-Mahjong-Hand besteht aus vier Dreisätzen und einem Paar mit insgesamt 14 Plättchen.
Ein Satz von drei kann entweder sein:
- Drei gleiche Kacheln (zB
4s 4s 4s
, aber nicht4m 4p 4s
) oder - Eine Folge von drei aufeinanderfolgenden Plättchen in derselben Farbe (z. B.
1s 2s 3s
oder,6p 7p 8p
aber nicht3s 4m 5m
oder3p 5p 7p
). Sequenzen werden nicht umbrochen (9m 1m 2m
ist also ungültig).
Ein Paar sind einfach zwei identische Kacheln (zB 5s 5s
).
Die Herausforderung
Ihr Programm erhält eine durch Leerzeichen getrennte Hand mit 13 Plättchen, wobei jedes Plättchen nicht öfter als viermal erscheint. Sie können entweder ein vollständiges Programm oder eine Funktion schreiben, die eine Zeichenfolge enthält.
Ihre Aufgabe ist es, alle möglichen 14. Plättchen ("Wartezeiten") zu finden, die, wenn sie der Hand hinzugefügt werden, eine fertige PPCG-Mahjong-Hand bilden würden. Die ausgegebenen Kacheln sollten durch Leerzeichen getrennt sein, können jedoch in beliebiger Reihenfolge sein. Führende oder nachfolgende Leerzeichen sind zulässig.
Ihr Programm sollte in einer angemessenen Zeitspanne von nicht mehr als einer Minute ausgeführt werden.
Beispiele
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
Im ersten Beispiel 1m 4s 7p 3m
bilden alle vorhandenen Drillinge, so dass der Einzelne 9s
ein Paar bildet.
Im zweiten Beispiel können die 2s 3s
und 7p 8p
nur Sequenzen bilden, und die verbleibenden Kacheln können nur Tripletts bilden. Daher kann kein Paar gebildet werden und es erfolgt keine Ausgabe.
Im dritten Beispiel teilt sich die Hand in 1m2m3m 2m3m4m 3m3m 1s1s 9s9s9s
. Normalerweise wäre dies eine Wartezeit 3m 1s
, aber da alle vier 3m
verwendet wurden, ist die einzige verfügbare Wartezeit 1s
.
Im vierten Beispiel m
vervollständigen alle Kacheln die Hand. Zum Beispiel 1m
könnte 1m1m1m 1m2m3m 4m5m6m 7m8m9m 9m9m
man eine fertige Hand haben.
Versuchen Sie, den Rest des vierten und fünften Beispiels herauszufinden :)
Wertung
Das ist Code-Golf , also gewinnt die Lösung mit den wenigsten Bytes. Es gelten Standardlücken .