Skip to content

Commit 0fae03d

Browse files
committed
Added solution for part 2 of day 21
1 parent aa503de commit 0fae03d

File tree

2 files changed

+24
-16
lines changed

2 files changed

+24
-16
lines changed

advent2020/day21.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ def get_ingredient_appearances_by_allergen(foods, all_allergens):
5151
return ingredients_by_allergen
5252

5353

54-
def get_allergens_by_ingredient(foods, all_ingredients, all_allergens):
54+
def get_ingredients_by_allergen(foods, all_ingredients, all_allergens):
5555
my_ingredients = set(all_ingredients)
5656
my_allergens = set(all_allergens)
57-
ingredient_allergens = {ingredient: None for ingredient in my_ingredients}
57+
ingredient_by_allergen = {}
5858
searching = True
5959
while searching:
6060
searching = False
@@ -65,12 +65,12 @@ def get_allergens_by_ingredient(foods, all_ingredients, all_allergens):
6565
possible_ingredients.intersection_update(food_ingredients)
6666
if len(possible_ingredients) == 1:
6767
ingredient = possible_ingredients.pop()
68-
ingredient_allergens[ingredient] = allergen
68+
ingredient_by_allergen[allergen] = ingredient
6969
my_ingredients.remove(ingredient)
7070
my_allergens.remove(allergen)
7171
searching = True
7272
break
73-
return ingredient_allergens
73+
return ingredient_by_allergen
7474

7575

7676
def count_ingredient_appearances(foods, ingredients):
@@ -82,20 +82,20 @@ def count_ingredient_appearances(foods, ingredients):
8282
return count
8383

8484

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())
9187
return count_ingredient_appearances(foods, safe_ingredients)
9288

9389

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()))
9692

9793

9894
def run():
9995
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)}")

test/test_day21.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@
2323

2424
import unittest
2525

26+
from advent2020.day21 import get_ingredients_by_allergen
27+
from advent2020.day21 import get_all_allergens
28+
from advent2020.day21 import get_all_ingredients
2629
from advent2020.day21 import get_part1_answer
2730
from advent2020.day21 import get_part2_answer
31+
from advent2020.day21 import parse_input
2832
from advent2020.util import get_input_data_lines
2933

3034

@@ -39,5 +43,9 @@
3943
class Day21Test(unittest.TestCase):
4044
def test_day21(self):
4145
lines = get_input_data_lines(data)
42-
self.assertEqual(get_part1_answer(lines), 5)
43-
self.assertEqual(get_part2_answer(lines), None)
46+
foods = parse_input(lines)
47+
all_ingredients = get_all_ingredients(foods)
48+
all_allergens = get_all_allergens(foods)
49+
ingredient_by_allergen = get_ingredients_by_allergen(foods, all_ingredients, all_allergens)
50+
self.assertEqual(get_part1_answer(foods, all_ingredients, ingredient_by_allergen), 5)
51+
self.assertEqual(get_part2_answer(ingredient_by_allergen), 'mxmxvkd,sqjhc,fvjkl')

0 commit comments

Comments
 (0)