import itertools ingredients = {} results = [] results_500 = [] file = open('_input.txt', 'r') for line in file: splits = line.split(' ') ingredients.setdefault(splits[0], {'capacity' : int(splits[2].strip(",")), 'durability': int(splits[4].strip(",")), 'flavor': int(splits[6].strip(",")), 'texture' : int(splits[8].strip(",")), 'calories' : int(splits[10].strip(","))}) for perm in itertools.combinations_with_replacement(ingredients, 101): ingredient_count = {} for i in range(0, len(perm)-1): ingredient_count.setdefault(perm[i], 0) ingredient_count[perm[i]] += 1 #print(ingredient_count) current_score = 0 capacity = 0 durability = 0 flavor = 0 texture = 0 calories = 0 for k, v in ingredient_count.items(): capacity += (v * ingredients[k]['capacity']) durability += (v * ingredients[k]['durability']) flavor += (v * ingredients[k]['flavor']) texture += (v * ingredients[k]['texture']) calories += (v * ingredients[k]['calories']) current_score = max(0, capacity) * max(0, durability) * max(0, flavor) * max(0, texture) #print(current_score) results.append([current_score, perm]) if calories == 500: results_500.append([current_score, perm]) print( max(results) ) print( max(results_500) )