Заказчиком является компания, которая производит разные куски (разных размеров) деревянного пола. У них есть проблема, что, когда кто-то покупает XXm² в деревянном полу, они должны упаковать его части
Коробка может обрабатывать максимальную сумму 220см. Куски начинаются с 30 см и увеличиваются на 5 см до полного куска 220 см.
Чего я пытаюсь достичь? Лучшее сочетание разных кусочков и размеров в коробке, чтобы у дна была хотя бы большая фигура, иначе коробка может «затормозить». Это потому, что коробка должна иметь сильное дно, чтобы обрабатывать другие части выше.
Да, сказал это. Перейдем к коду!
Клиент вводит кусочки, что-то вроде этого:
[220, 170, 150, 145, 130, 125, 125, 115, 110, 110, 105, 95, 95, 90,
90, 90, 75, 70, 70, 60, 60, 50, 50, 50, 50, 50, 50, 40]
И один из лучших выходов будет:
['220', '170,50', '150,70', '145,75', '130,90',
'125,95', '125,95', '115,105', '110,110', '90,90,40',
'70,50,50,50', '60,60,50,50',]
Я пытаюсь использовать itertools:
from itertools import combinations
for i in range(1, 5): # Maximum 4 pieces
for comb in combinations(customer_input, i):
if sum(comb) <= 220 and sum(comb) >= 195:
print(comb)
Первые отпечатки:
(220,)
(170, 50)
(170, 50)
(170, 50)
(170, 50)
(170, 50)
(170, 50)
Похоже, что он идет правильно, но выводит комбинацию (170, 50)
более одного раза. Я думаю, что один подход состоит в том, чтобы перестать пытаться создавать новые комбинации после того, как часть была использована.
Как мне этого добиться?