Контекст : рассмотрим игру, в которой у вас N шестигранных кубиков. Каждая сторона кубика представляет бросок: команда (COM), наука (SCI), инженер (ENG), медицина (MED), безопасность (SEC) и сторона, не используемая для этой проблемы. Цель игры - использовать кубики на карточках испытаний, в которых перечислены различные роли, необходимые для решения задачи. Например, у меня может быть карта вызова, которая требует 1 COM, 1 SCI и 1 MED. Поэтому, если я кидаю кости и получаю 1 COM, 1 SCI и 1 MED, я могу применить их к карте вызова, чтобы решить проблему.
Дополнительные правила : Наряду с отображением ролей костей 1: 1 для вызова требований карты, кости также можно комбинировать для изменения их ролей следующим образом:
- 2 MED может стать 1 SCI; 2 SCI могут стать 1 MED.
- 2 ENG может стать 1 СЕК; 2 SEC может стать 1 ENG.
- Роль COM + любая другая роль может стать любой ролью. Таким образом, COM + SEC может стать ENG.
- Любые три роли могут стать разными. Таким образом, COM + SEC + ENG может стать MED.
Задача : Я хочу сгенерировать список всех возможных комбинаций игральных костей для требований карты вызова. Например, скажем, карта вызова требует 1 SCI, 1 ENG и 1 MED. От руки вижу, что мне понадобится:
, если 1 SCI, 1 ENG и 1 MED, выполнено (A, B, C)
если 1 SCI, 1 ENG и 2 SCI, сделано (A, B, D)
если 1 SCI, 1 ENG, и COM и другое, сделано (A, B, E)
если 1 SCI, 1 ENG и 3 других, сделано (A, B, F)
, если 1 SCI, 2 SEC и 1 MED, выполнено (A, G, C)
если 1 SCI, 2 SEC и 2 SCI, сделано (A, G, D)
если 1 SCI, 2 SEC, COM и другое, сделано (A, G, E)
если 1 SCI, 2 SEC и 3 других, сделано (A, G, F)
если 1 SCI, COM и другие, и 1 MED, сделано (A, E, C)
если 1 SCI, COM и другие, и 2 SCI, сделано (A, E, D)
если 1 SCI, COM и другие, и COM и другие, сделано (A, E, E)
если 1 SCI, COM и другие, и 3 других, сделано (A, E, F)
если 1 SCI, 3 других и 1 MED, выполнено (A, F, C)
если 1 SCI, 3 других и 2 SCI, сделано (A, F, D)
если 1 SCI, 3 другие, и COM и другие, сделано (A, F, E)
если 1 SCI, 3 других и 3 других, сделано (A, F, F)
Кроме того, мне нужно заменить исходный 1 SCI на 2 MED, COM + другое устройство и 3 других устройства с такими же группировками.
Вопрос : Несмотря на примеры, я изо всех сил пытаюсь найти алгоритм, против которого я могу кодировать. Может ли кто-нибудь предложить алгоритм, который может включать в себя обмен ролями на другие роли как часть списка всех допустимых комбинаций?