Найти комбинации элементов размером больше, чем количество элементов - PullRequest
0 голосов
/ 23 марта 2020

Например, у меня есть сейф, которому нужен ответ длиной 5 (XXXXX), но вы используете только 1,2,3. Таким образом, некоторые комбо могут быть 1,2,3 & 1,1,1 & 1,1,2 et c ... но мне нужно найти все возможности.

Я провел мозговой штурм и думаю, что Мне нужно найти все перестановки всех комбинаций из трех чисел, но я не могу понять, как найти ответ в размере 5.

Если бы это было только три числа, а ответ был длиной 3, я мог бы просто использовать функция перестановки, но это не работает, так как мне нужно, чтобы она была большего размера, чем используемые элементы.

1 Ответ

0 голосов
/ 24 марта 2020

Нет проблем с !

?- use_module(library(clpfd)).
true.

?- length(Zs, 5), Zs ins 1..3, labeling([], Zs).
   Zs = [1, 1, 1, 1, 1]
;  Zs = [1, 1, 1, 1, 2]
;  Zs = [1, 1, 1, 1, 3]
;  Zs = [1, 1, 1, 2, 1]
;  Zs = [1, 1, 1, 2, 2]
;  Zs = [1, 1, 1, 2, 3]
;  Zs = [1, 1, 1, 3, 1]
;  Zs = [1, 1, 1, 3, 2]
;  Zs = [1, 1, 1, 3, 3]
;  Zs = [1, 1, 2, 1, 1]
...
...