Маджонг - гра в плитки, яка надзвичайно популярна в Азії. Зазвичай він грається з чотирма гравцями, і мета гри - це першою особою, яка виконає дійсну руку за допомогою плитки. У маджонгу є три костюми для плитки плюс почесні плитки - для цього виклику ми розглянемо лише руки, сформовані за допомогою плитки з одного костюма.
Плитки пронумеровані від 1
до 9
, і є рівно чотири копії кожної плитки. Дійсна рука складається з чотирьох наборів з трьох і пари, загалом чотирнадцять плиток.
Набір з трьох може бути будь-яким:
- Трійця, три однакових плитки (наприклад
444
), або - Послідовність трьох послідовних плиток (наприклад,
123
чи678
ні357
). Послідовності не обертаються (тому912
недійсні).
Пара - це просто дві однакові плитки (наприклад 55
).
Змагання
Давши дійсну руку з чотирнадцяти плиток, визначте її бал на основі таких критеріїв:
Condition Description Point/s
-------------------------------------------------------------------------------
Straight Contains the sequences 123 456 789 1
Identical sequences Contains two identical sequences 1
All simples Only 2-8, no 1s or 9s 1
All sequences All sets of three are sequences 1
All triplets All sets of three are triplets 2
Flush Single-suit hand (always applies) 5
(Оцінка балів тут заснована на японських правилах маджонгу, але сильно спрощена, щоб зробити специфікацію менш брудною.)
Оцінка руки - це сума балів за умови, які вона задовольняє. Якщо руку можна розкласти більш ніж одним способом, прийміть найбільшу кількість декомпозицій.
Гарантована вхідна сторона є дійсною, тобто чотирнадцять плиток від 1 до 9, і кожна плитка з’являється не більше чотирьох разів, і можна вважати, що вона вже сортована. Введення - це список цифр (у вигляді рядка або єдиного плоского списку цілих чисел) через STDIN, аргумент функції або командний рядок. Вихід може бути STDOUT або повернутим значенням.
Тестові справи
22233355777888 -> 8 # 222 333 55 777 888, flush + all simp. + all trip.
11112345678999 -> 6 # 111 123 456 789 99, flush + straight
11123456788999 -> 5 # 111 234 567 88 999, flush only (no straight)
23344455566788 -> 7 # 234 345 456 567 88, flush + all simp. + all seq.
33334444555566 -> 8 # 33 345 345 456 456, flush + all simp. + all seq. + identical seq.
11122233377799 -> 7 # 111 222 333 777 99, flush + all trip. (no identical seq.)
12344556678889 -> 8 # 123 456 456 789 88, flush + all seq. + straight + identical seq.
11344556678999 -> 5 # 11 345 456 678 999, flush only (no identical seq.)
22233344455566 -> 8 # 222 333 444 555 66, flush + all simp. + all trip.
11112233344555 -> 5 # 111 123 234 345 55, flush only
У п’ятому прикладі, незважаючи на наявність двох пар однакових послідовностей, для досягнення точки потрібна лише одна. Розкладання 345 345 345 345 66
було б таким же, а 333 345 444 555 66
гірше -.
Оцінка балів
Це код-гольф , тому рішення в найменших байтах виграє. Застосовуються стандартні лазівки .
Пов’язаний виклик: що ви чекаєте? (Маджонг-вирішувач)