Идея, благодаря @ MartinBüttner из обсуждения в чате
Маджонг - это игра в плитку, которая очень популярна в Азии. Как правило, в нее играют четыре игрока, и цель игры - стать первым, кто выполнил правильную руку, используя плитки. Для этой задачи мы рассмотрим упрощенную версию игры - PPCG mahjong.
В PPCG маджонг, есть три костюмы - m
, p
и s
- и плитки пронумерованы от 1
до 9
. Существует ровно четыре копии каждой плитки, и плитки обозначены номером, за которым следует их масть (например 3m
, 9s
).
Готовая рука маджонга PPCG состоит из четырех наборов по три и пары, что в общей сложности составляет 14 фишек.
Набор из трех может быть:
- Три одинаковых тайла (например
4s 4s 4s
, но не4m 4p 4s
), или - Последовательность из трех последовательных плиток в одной масти (например,
1s 2s 3s
или6p 7p 8p
нет,3s 4m 5m
или3p 5p 7p
). Последовательности не переносятся (поэтому9m 1m 2m
недопустимы).
Пара - это просто две одинаковые плитки (например 5s 5s
).
Соревнование
Ваша программа получит разделенную пробелом руку из 13 плиток, каждая из которых будет появляться не более четырех раз. Вы можете написать либо полную программу, либо функцию, которая принимает строку.
Ваша задача - найти все возможные 14-тые плитки («ждет»), которые, если их добавить в руку, сформируют законченную комбинацию маджонга PPCG. Выводимые плитки должны быть разделены пробелами, но могут быть в любом порядке. Допускаются начальные или конечные пробелы.
Ваша программа должна работать за разумное время, не более минуты.
Примеры
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
В первом примере 1m 4s 7p 3m
все они формируют существующие триплеты, оставляя в одиночестве 9s
пару.
Во втором примере 2s 3s
и 7p 8p
могут формировать только последовательности, а оставшиеся фрагменты могут образовывать только триплеты. Следовательно, никакая пара не может быть сформирована, и нет выхода.
В третьем примере рука распадается на 1m2m3m 2m3m4m 3m3m 1s1s 9s9s9s
. Обычно это ожидание 3m 1s
, но, поскольку все четыре 3m
были использованы, единственное доступное ожидание 1s
.
В четвертом примере все m
плитки завершают раздачу. Например, для 1m
, может быть, 1m1m1m 1m2m3m 4m5m6m 7m8m9m 9m9m
кто является законченной рукой.
Попробуйте проработать остаток четвертого примера и пятого примера :)
счет
Это код-гольф , поэтому выигрывает решение с наименьшим количеством байтов. Применяются стандартные лазейки .