Ідея завдяки @ MartinBüttner з обговорення в чаті
Маджонг - гра в плитки, яка надзвичайно популярна в Азії. Зазвичай він грається з чотирма гравцями, і мета гри - це першою особою, яка виконає дійсну руку за допомогою плитки. Для цього завдання ми розглянемо спрощену версію гри - PPCG маджонг.
У 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
яка є завершеною рукою.
Спробуйте опрацювати решту четвертого прикладу та п'ятого прикладу :)
Оцінка балів
Це код-гольф , тому рішення в найменших байтах виграє. Застосовуються стандартні лазівки .