class permcom:
def __init__(self, INPUT_SET, IS_PERM, REPETITION):
self.end_set = []
self.input_set = INPUT_SET
self.is_perm = IS_PERM
self.repetition = REPETITION
def helpfunc(self, seen, depth, current):
if depth == 0:
self.end_set.append(seen[:])
else:
for i in range(current, len(self.input_set)):
if(self.repetition or not self.input_set[i] in seen):
seen.append(self.input_set[i])
if(self.is_perm):
self.helpfunc(seen, depth - 1, 0)
else:
self.helpfunc(seen, depth - 1, i)
del seen[-1]
# cardinality = choices C slots
def return_all_combinations_without_repetition(input_set, subset_size):
instance = permcom(input_set, False, False)
A = []
instance.helpfunc(A, subset_size, 0)
return instance.end_set
# cardinality = (slots + choices - 1) C (slots)
def return_all_combinations_with_repetition(input_set, subset_size):
instance = permcom(input_set, False, True)
A = []
instance.helpfunc(A, subset_size, 0)
return instance.end_set
# start here
subset_size = 4
allcombs = return_all_combinations_without_repetition(list(range(1, 20)), subset_size)
found_combs = []
for comb in allcombs:
comb_sum = sum(comb)
combs_with_rep = []
for i in range(2, 10):
combs_with_rep += return_all_combinations_with_repetition(comb, i)
combs_with_rep_sums = []
for i in combs_with_rep:
combs_with_rep_sums.append(sum(i))
num_combs_adding_to_sum_of_comb = combs_with_rep_sums.count(comb_sum)
if num_combs_adding_to_sum_of_comb == 1:
found_combs.append((comb, comb_sum))
for i in found_combs:
print(i)