На самом деле это вопрос, основанный на маджонге, но для понимания также может быть достаточно фона Romme или даже на основе покера.
В маджонге 14 плиток (плитки похожи на карты в Покере) расположены на 4 набора и на пару. Улица ( "123" ) всегда использует ровно 3 плитки, не более и не менее. Набор такого же типа ( "111" ) состоит также из 3 плиток. Это приводит к сумме 3 * 4 + 2 = 14 плиток.
Существуют различные исключения, такие как Кан или Тринадцать сирот, которые здесь не актуальны. Цвета и диапазоны значений (1-9) также не важны для алгоритма.
Я пытаюсь определить, может ли рука быть организована так, как описано выше. По определенным причинам он должен не только иметь дело с 14, но и с любым количеством плиток. (Следующим шагом было бы найти, сколько фрагментов нужно обменивать, чтобы иметь возможность выполнить руку.)
Примеры:
11122233344455
- достаточно легко, 4 набора и пара. 12345555678999
- 123, 456, 789, 555, 99 11223378888999
- 123, 123, 789, 888, 99 11223344556789
- не действительная рука
Моя текущая и еще не реализованная идея такова: для каждой плитки попробуйте сделать a) улицу b) набор c) пару. Если ни один не работает (или будет > 1 пара), вернитесь к предыдущей итерации и попробуйте следующую опцию, или, если это самый высокий уровень, сбой. В противном случае удалите использованные плитки из списка оставшихся фрагментов и продолжите следующую итерацию.
Я считаю, что этот подход работает, а также будет достаточно быстрым (производительность - "хороший бонус" ), но меня интересует ваше мнение по этому поводу. Можете ли вы подумать об альтернативных решениях? Это или что-то подобное уже существует?
(Не домашнее задание, Я учусь играть в маджонг.)