Алгоритм поиска улиц и того же типа в руке

Это на самом деле вопрос, основанный на маджонге, но для понимания также будет достаточно фона, основанного на ромме или даже покере.

В маджонге 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 - недействительная рука

Моя текущая и еще не реализованная идея такова: для каждой плитки попробуйте сделать а) улица б) набор в) пара. Если ничего не работает (или было бы> 1 пары), вернитесь к предыдущей итерации и попробуйте следующий вариант, или, если это самый высокий уровень, потерпите неудачу. В противном случае удалите использованные плитки из списка оставшихся плиток и перейдите к следующей итерации.

Я считаю, что этот подход работает и также будет достаточно быстрым (производительность - "приятный бонус"), но меня интересуют ваши мнение по этому поводу. Вы можете придумать альтернативные решения? Это или что-то подобное уже существует?

(Не домашнее задание, Я учусь играть в Маджонг. )

12
задан Community 13 April 2017 в 12:38
поделиться