Примечание: это связано с вариацией игры Rummikub
Справочная информация и правила
Rummikub - это игра на основе тайлов. Есть четыре цвета: красный, оранжевый, синий и черный. Для каждого цвета есть 13 плиток (помечены от 1 до 13), а также есть 2 джокера, которые не зависят от цвета, следовательно, в общей сложности 54 штук. В этом варианте Rummikub каждый игрок получает 14 плиток и должен получать еще одну плитку и сбрасывать еще одну в каждом раунде, чтобы количество плиток было постоянным. Игроки не видят плитки друг друга. Цель состоит в том, чтобы сгруппировать плитки так, чтобы все фигуры принадлежали хотя бы к одной группе (см. Ниже). Когда игрок сгруппировал все фигуры, он бросает свою плитку и показывает свои фигуры. Другие затем проверяют, все ли комбинации действительны, и если они есть, игрок выигрывает раунд.
Как плитки могут быть сгруппированы?
Есть только два типа групп:
Многоцветные группы:
- Они состоят из 3 или 4 плиток.
- Они содержат только плитки с одинаковым номером на них.
- Все плитки разных цветов.
- Пример:
RED 9, BLUE 9, BLACK 9
.
Одноцветные группы:
- Они состоят как минимум из 3 плиток.
- Они не могут содержать более 13 плиток.
- Они содержат только плитки с разными последовательными номерами в порядке возрастания.
- Все плитки имеют одинаковый цвет.
- Плитки с маркировкой
1
не могут быть местами после маркированных плиток13
. - Пример:
RED 5, RED 6, RED 7
.
Подожди, что делают Джокеры?
Джокеры могут заменить любую фигуру в игре. Например, наш первый пример может стать JOKER, BLUE 9, BLACK 9
, RED 9, JOKER, BLACK 9
или RED 9, BLUE 9, JOKER
. То же самое относится и к нашему другому примеру. Однако нельзя ставить двух джокеров в одну группу, поэтому подобные вещи JOKER, ORANGE 8, JOKER
запрещены.
задача
По заданной группе плиток Rummikub определите, является ли она действительной. Вам гарантировано, что дубликаты плиток не появятся, кроме двух джокеров, и что плитки, которые вы получите в качестве входных данных, действительны (например, такие вещи, как 60
не будут отображаться)
Ввод, вывод
Вы можете получить ввод и предоставить вывод любым стандартным методом.
Некоторые допустимые форматы ввода: список строк, список кортежей, вложенные списки, строки или все, что вы считаете подходящим. Цвета могут быть приняты как строки (например:) "Blue","Red", etc.
, как сокращения строк (пожалуйста, выделите синие и черные плитки), или как целые числа, соответствующие цвету. Когда дело доходит до джокеров, вы должны упомянуть, как ваша программа получает их в качестве входных данных. Если вы выбираете Strings, у вас может быть что-то вроде RED 9, JOKER, ...
, если вы выбираете кортежи, которые вы можете иметь, (9,"RED"), ("JOKER")
или что-то подобное. Если это поможет, вы можете получить цвет для этого Джокера (который не должен влиять на вывод вашей программы). Например, вы можете иметь ("JOKER","RED")
или ("JOKER","BLUE")
, но это никак не должно влиять на вывод.
Что касается вывода, применяются стандартные правила для решения проблемы .
Отработанные примеры
Давайте рассмотрим пример, который, надеюсь, облегчит понимание. Дана группа следующим образом, где каждый кортеж представляет плитку:
[(9, «КРАСНЫЙ»), (9, «ОРАНЖЕВЫЙ»), («ДЖОКЕР»), (9, «ЧЕРНЫЙ»)]
Это должно вернуть истинное значение, потому что ввод действителен. В этом случае джокер подставляет (9, "BLUE")
, и они образуют многоцветную группу.
Если бы вам дали следующую группу:
[(9, «СИНИЙ»), (9, «ОРАНЖЕВЫЙ»), (9, «КРАСНЫЙ»), (9, «ЧЕРНЫЙ»), («ДЖОКЕР»)]
Это было бы недопустимо, и поэтому ваша программа должна возвращать ложное значение, потому что джокеру ничего не осталось заменить, потому что максимальное количество карт в многоцветной группе равно 4.
Дополнительные тестовые случаи
Они предназначены для расширенного набора тестов, который охватывает практически все возможные ситуации:
Вход -> Выход [(1, «СИНИЙ»), (2, «СИНИЙ»), (3, «СИНИЙ»), (4, «СИНИЙ»), (5, «СИНИЙ»), (6, «СИНИЙ»)]] - > правда [(6, «СИНИЙ»), (6, «КРАСНЫЙ»), (6, «ЧЕРНЫЙ)] -> правда [(5, "черный"), (6, "черный"), (7, "черный"), (8, "черный"), (9, "черный"), (10, "черный"), ( "ДЖОКЕР"), (12, "ЧЕРНЫЙ")] -> правда [("Джокер"), (3, "СИНИЙ"), (3, "КРАСНЫЙ")] -> правда [(8, «ЧЕРНЫЙ»), (2, «КРАСНЫЙ»), (13, «СИНИЙ»)] -> ложь [(4, «КРАСНЫЙ»), (3, «КРАСНЫЙ»), (5, «КРАСНЫЙ»)] -> ложь [(5, «ЧЕРНЫЙ»), (6, «ЧЕРНЫЙ)] -> ложь [("ДЖОКЕР"), (5, "КРАСНЫЙ"), ("ДЖОКЕР")] -> ложь [(4, «КРАСНЫЙ»), (5, «КРАСНЫЙ»), (6, СИНИЙ »)] -> ложь [(4, «КРАСНЫЙ»), («ДЖОКЕР»), (5, «КРАСНЫЙ»)] -> ложь [(12, «ЧЕРНЫЙ»), (13, «ЧЕРНЫЙ), (1,« ЧЕРНЫЙ »)] -> ложь
Это код-гольф , поэтому выигрывает самый короткий код в байтах на каждом языке!