Uwaga: jest to związane z odmianą gry Rummikub
Tło i zasady
Rummikub to gra oparta na kafelkach. Istnieją cztery kolory: czerwony, pomarańczowy, niebieski i czarny. Na każdy kolor przypada 13 kafelków (oznaczonych od 1 do 13), a także 2 Jokery, które są niezależne od koloru, dlatego w sumie jest ich 54. W tej odmianie Rummikub każdy gracz otrzymuje 14 płytek i musi zdobyć jeszcze jeden kafelek i upuszczać kolejne w każdej rundzie, aby liczba płytek była stała. Gracze nie widzą siebie nawzajem. Celem jest zgrupowanie płytek, tak aby wszystkie elementy należały do co najmniej jednej grupy (patrz poniżej). Kiedy gracz zgrupuje wszystkie pionki, upuszcza swoją płytkę i odsłania swoje pionki. Inni następnie sprawdzają, czy wszystkie kombinacje są prawidłowe, a jeśli tak, to gracz wygrywa rundę.
Jak można grupować kafelki?
Istnieją tylko dwa typy grup:
Grupy wielokolorowe :
- Składają się z 3 lub 4 płytek.
- Zawierają tylko płytki z tym samym numerem na nich.
- Wszystkie płytki są w różnych kolorach.
- Przykład:
RED 9, BLUE 9, BLACK 9
.
Grupy jednobarwne :
- Składają się z co najmniej 3 płytek.
- Nie mogą zawierać więcej niż 13 płytek.
- Zawierają tylko kafelki z różnymi kolejnymi liczbami w porządku rosnącym.
- Wszystkie płytki mają ten sam kolor.
- Płytki oznaczone etykietą
1
nie mogą być miejscami po płytkach oznaczonych etykietą13
. - Przykład:
RED 5, RED 6, RED 7
.
Zaraz, co robią Jokery?
Jokery mogą zastąpić dowolny element w grze. Na przykład naszym pierwszym przykładem może być JOKER, BLUE 9, BLACK 9
, RED 9, JOKER, BLACK 9
lub RED 9, BLUE 9, JOKER
. To samo dotyczy naszego drugiego przykładu. Jednak nie można umieszczać dwóch Jokerów w tej samej grupie, więc takie rzeczy JOKER, ORANGE 8, JOKER
są zabronione.
Zadanie
Biorąc pod uwagę grupę kafelków Rummikub, sprawdź, czy jest poprawna. Masz gwarancję, że nie pojawią się duplikaty kafelków, z wyjątkiem 2 jokerów i że kafelki otrzymane jako dane wejściowe są prawidłowe (np. Rzeczy takie jak 60
nie pojawią się).
Wejście wyjście
Możesz wziąć dane wejściowe i dostarczyć dane wyjściowe dowolną standardową metodą.
Niektóre prawidłowe formaty wejściowe: lista ciągów, lista krotek, zagnieżdżone listy, ciągi lub cokolwiek innego, co uważasz za odpowiednie. Kolory mogą być traktowane jako ciągi znaków (np . "Blue","Red", etc.
:), skróty ciągów znaków (należy wyróżnić niebieskie i czarne kafelki) lub jako liczby całkowite odpowiadające kolorowi. Jeśli chodzi o Jokery, powinieneś wspomnieć o tym, jak twój program odbiera je jako dane wejściowe. Jeśli wybierzesz Strings, możesz mieć coś takiego RED 9, JOKER, ...
, jeśli wybierzesz krotki, które możesz mieć (9,"RED"), ("JOKER")
lub coś równoważnego. Jeśli to pomoże, możesz otrzymać kolor dla tego Jokera (co nie powinno wpływać na wynik twojego programu). Na przykład możesz mieć ("JOKER","RED")
lub ("JOKER","BLUE")
, ale nie powinno to w żaden sposób wpływać na wynik.
Jeśli chodzi o wynik, zastosowanie mają standardowe zasady dotyczące problemu decyzyjnego .
Sprawdzone przykłady
Weźmy przykład, który, miejmy nadzieję, ułatwiłby zrozumienie. Biorąc pod uwagę grupę w następujący sposób, gdzie każda krotka reprezentuje kafelek:
[(9, „RED”), (9, „ORANGE”), („JOKER”), (9, „BLACK”)]
Powinno to zwrócić prawdziwą wartość, ponieważ dane wejściowe są prawidłowe. W tym przypadku Joker zastępuje (9, "BLUE")
i tworzą grupę wielokolorową.
Jeśli otrzymasz następującą grupę:
[(9, „NIEBIESKI”), (9, „POMARAŃCZOWY”), (9, „CZERWONY”), (9, „CZARNY”), („JOKER”)]
Byłoby to nieprawidłowe, dlatego program powinien zwrócić wartość falsy, ponieważ joker nie ma już nic do zastąpienia, ponieważ maksymalna liczba kart w grupie wielokolorowej wynosi 4.
Dodatkowe przypadki testowe
Są to dla rozszerzonego zestawu testów, który obejmuje prawie wszystkie możliwe sytuacje:
Wejście -> Wyjście [(1, „NIEBIESKI”), (2, „NIEBIESKI”), (3, „NIEBIESKI”), (4, „NIEBIESKI”), (5, „NIEBIESKI”), (6, „NIEBIESKI”)] - > prawda [(6, „NIEBIESKI”), (6, „CZERWONY”), (6, „CZARNY)] -> truey [(5, „CZARNY”), (6, „CZARNY”), (7, „CZARNY”), (8, „CZARNY”), (9, „CZARNY”), (10, „CZARNY”), ( „JOKER”), (12, „BLACK”)] -> truey [(„JOKER”), (3, „NIEBIESKI”), (3, „CZERWONY”)] -> truey [(8, „CZARNY”), (2, „CZERWONY”), (13, „NIEBIESKI”)] -> falsy [(4, „RED”), (3, „RED”), (5, „RED”)] -> falsy [(5, „CZARNY”), (6, „CZARNY)] -> falsy [(„JOKER”), (5, „RED”), („JOKER”)] -> falsy [(4, „RED”), (5, „RED”), (6, BLUE ”)] -> falsy [(4, „RED”), („JOKER”), (5, „RED”)] -> falsy [(12, „CZARNY”), (13, „CZARNY), (1,„ CZARNY ”)] -> falsy
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach w każdym języku!