I have A menu dict item as key and price as value. There may exist a combination of item that will be bit cheaper than single item. For exa:
menu = {
('burger',) : 5.00,
('pizza',) : 12.00,
('coke',) : 4.00,
('macpuff',) : 4.00,
('pasta',) : 3.00,
('french_fries',) : 2.00,
('burger', 'coke', 'french_fries') : 10.00,
('pizza', 'coke') : 15.00,
}
Now suppose i ordered few items then output will be min-amount of given order:
I/P > burger, coke
O/P > 9 (5.00 + 4.00)
I/P > burger, coke, french_fries
O/P > 10.00
I/P > pizza, coke, french_fries
O/P > 17.00 (15.00 + 2.00)
here is the code i tried so for all prices which i will use as generators:
def isSubset(a, b):
"""
compare two iterable and return true if first is subset of second
"""
b = list(b)
if not hasattr(a, '__iter__'):
a = [a]
for each in a:
try:
b.remove(each)
except ValueError:
return False
return True
def rest_min_price(order):
if order:
for item, price in menu.iteritems():
if isSubset(order[0], item):
new_order = order[1:]
for itm in item:
try:
new_order.remove(itm)
except ValueError:
pass
yield price + rest_min_price(new_order)
but when i run this it's saying type error:
for each in rest_min_price(order_item):
print each
TypeError: unsupported operand type(s) for +: 'int' and 'generator'
list.remove
only removes the first match found, you can use a LC here:new_order = [x for x in order[1:] if x not in item]
– Quiteri