Идея, благодаря @ 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кто является законченной рукой.
Попробуйте проработать остаток четвертого примера и пятого примера :)
счет
Это код-гольф , поэтому выигрывает решение с наименьшим количеством байтов. Применяются стандартные лазейки .