Я пытаюсь выяснить, как сгенерировать список множеств, где каждый набор имеет длину N, а сумма каждого набора равна X.Получить список наборов, где сумма каждого набора равна X
Я нашел этот код:
num_split(0,[]).
num_split(N, [X | List]):-
between(1,N,X),
plus(X,Y,N),
num_split(Y,List).
и я могу использовать, чтобы получить список наборов с суммой X:
num_split(6,List),length(List,5).
List = [1, 1, 1, 1, 2] ;
List = [1, 1, 1, 2, 1] ;
List = [1, 1, 2, 1, 1] ;
List = [1, 2, 1, 1, 1] ;
List = [2, 1, 1, 1, 1] ;
false.
проблема заключается в том, что те все перестановки, и я ищу комбинации. Выход я ищу должен быть чем-то вроде get_combos(Sum,Length,List)
:
get_combos(6,2,List).
List = [5,1];
List = [4,2];
List = [3,3];
false.
Любые указатели?
идеальных! Я удалил «цепочку (List, # <)», потому что я искал все списки, которые суммируются с суммой, а не только упорядоченные списки. Я использовал код для решения главы 1 для DropQuest 2012: https://github.com/seanhagen/DropQuest-2012-Chapter-1-Prolog-Solver –