@@ -51,10 +51,10 @@ def get_ingredient_appearances_by_allergen(foods, all_allergens):
51
51
return ingredients_by_allergen
52
52
53
53
54
- def get_allergens_by_ingredient (foods , all_ingredients , all_allergens ):
54
+ def get_ingredients_by_allergen (foods , all_ingredients , all_allergens ):
55
55
my_ingredients = set (all_ingredients )
56
56
my_allergens = set (all_allergens )
57
- ingredient_allergens = {ingredient : None for ingredient in my_ingredients }
57
+ ingredient_by_allergen = {}
58
58
searching = True
59
59
while searching :
60
60
searching = False
@@ -65,12 +65,12 @@ def get_allergens_by_ingredient(foods, all_ingredients, all_allergens):
65
65
possible_ingredients .intersection_update (food_ingredients )
66
66
if len (possible_ingredients ) == 1 :
67
67
ingredient = possible_ingredients .pop ()
68
- ingredient_allergens [ ingredient ] = allergen
68
+ ingredient_by_allergen [ allergen ] = ingredient
69
69
my_ingredients .remove (ingredient )
70
70
my_allergens .remove (allergen )
71
71
searching = True
72
72
break
73
- return ingredient_allergens
73
+ return ingredient_by_allergen
74
74
75
75
76
76
def count_ingredient_appearances (foods , ingredients ):
@@ -82,20 +82,20 @@ def count_ingredient_appearances(foods, ingredients):
82
82
return count
83
83
84
84
85
- def get_part1_answer (lines ):
86
- foods = parse_input (lines )
87
- all_ingredients = get_all_ingredients (foods )
88
- all_allergens = get_all_allergens (foods )
89
- allergens_by_ingredient = get_allergens_by_ingredient (foods , all_ingredients , all_allergens )
90
- safe_ingredients = [ingredient for ingredient , allergen in allergens_by_ingredient .items () if allergen is None ]
85
+ def get_part1_answer (foods , all_ingredients , ingredient_by_allergen ):
86
+ safe_ingredients = all_ingredients .difference (ingredient_by_allergen .values ())
91
87
return count_ingredient_appearances (foods , safe_ingredients )
92
88
93
89
94
- def get_part2_answer (lines ):
95
- return None
90
+ def get_part2_answer (ingredient_by_allergen ):
91
+ return ',' . join ( ingredient_by_allergen [ allergen ] for allergen in sorted ( ingredient_by_allergen . keys ()))
96
92
97
93
98
94
def run ():
99
95
lines = util .get_input_file_lines ("day21.txt" )
100
- print (f"The answer to part 1 is { get_part1_answer (lines )} " )
101
- print (f"The answer to part 2 is { get_part2_answer (lines )} " )
96
+ foods = parse_input (lines )
97
+ all_ingredients = get_all_ingredients (foods )
98
+ all_allergens = get_all_allergens (foods )
99
+ ingredient_by_allergen = get_ingredients_by_allergen (foods , all_ingredients , all_allergens )
100
+ print (f"The answer to part 1 is { get_part1_answer (foods , all_ingredients , ingredient_by_allergen )} " )
101
+ print (f"The answer to part 2 is { get_part2_answer (ingredient_by_allergen )} " )
0 commit comments