Hinweis: Dies hängt mit einer Variation des Spiels Rummikub zusammen
Hintergrund & Regeln
Rummikub ist ein auf Kacheln basierendes Spiel. Es gibt vier Farben: Rot, Orange, Blau und Schwarz. Für jede Farbe gibt es 13 Kacheln (von 1 bis 13 beschriftet) und es gibt auch 2 Joker, die farbunabhängig sind, daher gibt es insgesamt 54 Teile. In dieser Variante von Rummikub erhält jeder Spieler 14 Plättchen und muss in jeder Runde ein weiteres Plättchen erhalten und ein weiteres fallen lassen, so dass die Anzahl der Plättchen konstant ist. Die Spieler sehen sich nicht gegenseitig. Ziel ist es, die Kacheln so zu gruppieren, dass alle Teile zu mindestens einer Gruppe gehören (siehe unten). Wenn ein Spieler alle Teile gruppiert hat, lässt er sein Kachelbrett fallen und legt seine Teile frei. Die anderen prüfen dann, ob alle Kombinationen gültig sind, und wenn dies der Fall ist, gewinnt der Spieler die Runde.
Wie können die Kacheln gruppiert werden?
Es gibt nur zwei Arten von Gruppen:
Mehrfarbige Gruppen:
- Sie bestehen aus 3 oder 4 Kacheln.
- Sie enthalten nur Kacheln mit derselben Nummer.
- Alle Fliesen sind in verschiedenen Farben.
- Beispiel :
RED 9, BLUE 9, BLACK 9
.
Einfarbige Gruppen:
- Sie bestehen aus mindestens 3 Kacheln.
- Sie dürfen nicht mehr als 13 Kacheln enthalten.
- Sie enthalten nur Kacheln mit unterschiedlichen fortlaufenden Nummern in aufsteigender Reihenfolge.
- Alle Fliesen haben die gleiche Farbe.
- Mit gekennzeichnete Kacheln
1
dürfen keine Stellen nach gekennzeichneten Kacheln sein13
. - Beispiel :
RED 5, RED 6, RED 7
.
Warten Sie, was machen die Joker?
Joker können jedes Stück im Spiel ersetzen. Zum Beispiel kann unser erstes Beispiel werden JOKER, BLUE 9, BLACK 9
, RED 9, JOKER, BLACK 9
oder RED 9, BLUE 9, JOKER
. Gleiches gilt für unser anderes Beispiel. Man darf jedoch nicht zwei Joker in dieselbe Gruppe einordnen, so dass Dinge wie JOKER, ORANGE 8, JOKER
verboten sind.
Aufgabe
Bestimmen Sie anhand einer Rummikub-Kachelgruppe, ob diese gültig ist. Sie werden garantiert, dass keine doppelten Kacheln angezeigt werden, mit Ausnahme der 2 Joker, und dass die Kacheln, die Sie als Eingabe erhalten, gültig sind (z. B. Dinge wie 60
werden nicht angezeigt).
Input-Output
Sie können Eingaben vornehmen und die Ausgabe mit einer beliebigen Standardmethode bereitstellen.
Einige gültige Eingabeformate: Liste der Zeichenfolgen, Liste der Tupel, verschachtelte Listen, Zeichenfolgen oder alles andere, was Sie für geeignet halten. Die Farben können als Zeichenfolgen (z. B. "Blue","Red", etc.
:), als Zeichenfolgenabkürzungen (bitte machen Sie blaue und schwarze Kacheln unterscheidbar) oder als Ganzzahlen entsprechend einer Farbe verwendet werden. Wenn es um Joker geht, sollten Sie als Eingabe angeben, wie Ihr Programm sie empfängt. Wenn Sie Strings wählen, haben Sie möglicherweise etwas wie RED 9, JOKER, ...
, wenn Sie Tupel wählen, die Sie haben können, (9,"RED"), ("JOKER")
oder etwas Äquivalentes. Wenn es hilft, erhalten Sie möglicherweise eine Farbe für diesen Joker (die die Ausgabe Ihres Programms nicht beeinflussen sollte). Zum Beispiel haben Sie vielleicht ("JOKER","RED")
oder ("JOKER","BLUE")
, aber das sollte die Ausgabe in keiner Weise beeinflussen.
In Bezug auf die Ausgabe gelten Standardregeln für ein Entscheidungsproblem .
Arbeitsbeispiele
Nehmen wir ein Beispiel, das hoffentlich das Verständnis erleichtert. Geben Sie eine Gruppe wie folgt an, wobei jedes Tupel eine Kachel darstellt:
[(9, "ROT"), (9, "ORANGE"), ("JOKER"), (9, "SCHWARZ")]
Dies sollte einen wahrheitsgemäßen Wert zurückgeben, da die Eingabe gültig ist. In diesem Fall ersetzt der Joker (9, "BLUE")
und sie bilden eine mehrfarbige Gruppe.
Wenn Sie die folgende Gruppe erhalten würden:
[(9, "BLAU"), (9, "ORANGE"), (9, "ROT"), (9, "SCHWARZ"), ("JOKER")]
Es wäre ungültig, und daher sollte Ihr Programm einen falschen Wert zurückgeben, da der Joker nichts mehr ersetzen kann, da die maximale Anzahl von Karten in einer mehrfarbigen Gruppe 4 beträgt.
Zusätzliche Testfälle
Diese sind für eine erweiterte Testsuite vorgesehen, die nahezu alle möglichen Situationen abdeckt:
Eingabe -> Ausgabe [(1, "BLAU"), (2, "BLAU"), (3, "BLAU"), (4, "BLAU"), (5, "BLAU"), (6, "BLAU")] - > wahr [(6, "BLAU"), (6, "ROT"), (6, "SCHWARZ)] -> wahr [(5, "SCHWARZ"), (6, "SCHWARZ"), (7, "SCHWARZ"), (8, "SCHWARZ"), (9, "SCHWARZ"), (10, "SCHWARZ"), ( "JOKER"), (12, "BLACK")] -> wahr [("JOKER"), (3, "BLAU"), (3, "ROT")] -> wahr [(8, "SCHWARZ"), (2, "ROT"), (13, "BLAU")] -> falsch [(4, "ROT"), (3, "ROT"), (5, "ROT")] -> Falschheit [(5, "SCHWARZ"), (6, "SCHWARZ)] -> falsch [("JOKER"), (5, "RED"), ("JOKER")] -> falsch [(4, "ROT"), (5, "ROT"), (6, BLAU ")] -> falsch [(4, "ROT"), ("JOKER"), (5, "ROT")] -> Falschheit [(12, "SCHWARZ"), (13, "SCHWARZ), (1," SCHWARZ ")] -> falsch
Dies ist Code-Golf , also gewinnt der kürzeste Code in Bytes in jeder Sprache!