Skip to content

Commit f224ed4

Browse files
committed
Added day 2015-15
1 parent 6581a4f commit f224ed4

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

2015/15-Science for Hungry People.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# -------------------------------- Input data -------------------------------- #
2+
import os
3+
4+
test_data = {}
5+
6+
test = 1
7+
test_data[test] = {"input": """Butterscotch: capacity -1, durability -2, flavor 6, texture 3, calories 8
8+
Cinnamon: capacity 2, durability 3, flavor -2, texture -1, calories 3""",
9+
"expected": ['Unknown', 'Unknown'],
10+
}
11+
12+
test += 1
13+
test_data[test] = {"input": """""",
14+
"expected": ['Unknown', 'Unknown'],
15+
}
16+
17+
test = 'real'
18+
input_file = os.path.join(os.path.dirname(__file__), 'Inputs', os.path.basename(__file__).replace('.py', '.txt'))
19+
test_data[test] = {"input": open(input_file, "r+").read(),
20+
"expected": ['21367368', '1766400'],
21+
}
22+
23+
# -------------------------------- Control program execution -------------------------------- #
24+
25+
case_to_test = 'real'
26+
part_to_test = 2
27+
verbose_level = 1
28+
29+
# -------------------------------- Initialize some variables -------------------------------- #
30+
31+
puzzle_input = test_data[case_to_test]['input']
32+
puzzle_expected_result = test_data[case_to_test]['expected'][part_to_test-1]
33+
puzzle_actual_result = 'Unknown'
34+
35+
36+
# -------------------------------- Actual code execution -------------------------------- #
37+
from itertools import combinations_with_replacement
38+
import re
39+
from functools import reduce
40+
from collections import Counter
41+
42+
ingredients = {}
43+
44+
for string in puzzle_input.split('\n'):
45+
if string == '':
46+
continue
47+
48+
ingredient, capacity, durability, flavor, texture, calories = re.match('([A-Za-z]*): capacity ([0-9-]*), durability ([0-9-]*), flavor ([0-9-]*), texture ([0-9-]*), calories ([0-9-]*)', string).groups()
49+
ingredients[ingredient] = (int(capacity), int(durability), int(flavor), int(texture), int(calories))
50+
print(ingredients)
51+
52+
combinaisons = list(combinations_with_replacement(ingredients, 100))
53+
recipe_max = 0
54+
for combinaison in combinaisons:
55+
recipe = Counter(combinaison)
56+
57+
recipe_score = [0 for i in range (4)]
58+
for ingredient in recipe:
59+
recipe_score = [recipe_score[i] + recipe[ingredient] * ingredients[ingredient][i] for i in range (4)]
60+
61+
recipe_score = reduce(lambda x, y: x*y if x > 0 and y > 0 else 0, recipe_score)
62+
63+
if part_to_test == 2:
64+
recipe_calories = sum([recipe[ingredient] * ingredients[ingredient][4] for ingredient in ingredients])
65+
if recipe_calories != 500:
66+
recipe_score = 0
67+
recipe_max = max(recipe_max, recipe_score)
68+
69+
puzzle_actual_result = recipe_max
70+
71+
72+
73+
# -------------------------------- Outputs / results -------------------------------- #
74+
75+
if verbose_level >= 3:
76+
print ('Input : ' + puzzle_input)
77+
print ('Expected result : ' + str(puzzle_expected_result))
78+
print ('Actual result : ' + str(puzzle_actual_result))
79+
80+
combinations_with_replacement
81+
82+

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy