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