Это на самом деле вопрос, основанный на маджонге, но для понимания также будет достаточно фона, основанного на ромме или даже покере.
В маджонге 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 пары), вернитесь к предыдущей итерации и попробуйте следующий вариант, или, если это самый высокий уровень, потерпите неудачу. В противном случае удалите использованные плитки из списка оставшихся плиток и перейдите к следующей итерации.
Я считаю, что этот подход работает и также будет достаточно быстрым (производительность - "приятный бонус"), но меня интересуют ваши мнение по этому поводу. Вы можете придумать альтернативные решения? Это или что-то подобное уже существует?
(Не домашнее задание, Я учусь играть в Маджонг. )