: , , , .
, , , , , . ( , , , , , max_entry, , n_boxes_in_domain.)
, max_entry=6, n_boxes_in_domain=3, target_number=20: 20 (2, 2, 5); (2, 2, 5) (1, 4, 5).
, , . , , , , . ( , ):
def xgroup(items):
L = len(items)
for i in range(L-1):
for j in range(1, L):
temp = list(items)
a = temp.pop(j)
b = temp.pop(i)
temp.insert(0, a*b)
yield temp
for x in xgroup(temp):
yield x
def product_combos(max_entry, n_boxes, items):
r = set()
if len(items)<=n_boxes:
r.add(tuple(items))
for i in xgroup(items):
x = i[:]
x.sort()
if x[-1]<=max_entry and len(x)<=n_boxes:
r.add(tuple(x))
r = [list(i) for i in r]
r.sort()
for i in r:
while len(i)<n_boxes:
i.insert(0, 1)
return r
, , ,
max_entry=6, n_boxes=3, items=(2,2,5)
[2, 2, 5]
[1, 4, 5]
, , , target_number=2106
max_entry=50, n_boxes=6, items=(2,3,3,3,3,13)
[2, 3, 3, 3, 3, 13]
[1, 2, 3, 3, 3, 39]
[1, 2, 3, 3, 9, 13]
[1, 1, 2, 3, 9, 39]
[1, 1, 2, 3, 13, 27]
[1, 1, 2, 9, 9, 13]
[1, 1, 1, 2, 27, 39]
[1, 3, 3, 3, 3, 26]
[1, 3, 3, 3, 6, 13]
[1, 1, 3, 3, 6, 39]
[1, 1, 3, 3, 9, 26]
[1, 1, 3, 3, 13, 18]
[1, 1, 3, 6, 9, 13]
[1, 1, 1, 3, 18, 39]
[1, 1, 1, 3, 26, 27]
[1, 1, 1, 6, 9, 39]
[1, 1, 1, 6, 13, 27]
[1, 1, 1, 9, 9, 26]
[1, 1, 1, 9, 13, 18]