From 50c5bc115bd40a17987fe99c4a213361035b22e3 Mon Sep 17 00:00:00 2001 From: kamoshi <18511281+kamoshi@users.noreply.github.com> Date: Mon, 21 Dec 2020 14:03:12 +0100 Subject: [PATCH] Update day21.py --- 2020/Python/day21.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/2020/Python/day21.py b/2020/Python/day21.py index 90cf5c9..4adf6ed 100644 --- a/2020/Python/day21.py +++ b/2020/Python/day21.py @@ -55,10 +55,23 @@ INGREDIENTS, ALLERGENS, DATA = parse() print(solve_p1(DATA, INGREDIENTS, ALLERGENS)) -def solve_p2(data: list[Tuple[list[str], list[str]]], ingredients: set[str], allergens: set[str]) -> int: - assigned_allergens = [] - for allergen in allergens: - print(allergen, predict_ingredients(data, allergen)) +def solve_p2(data: list[Tuple[list[str], list[str]]], ingredients: set[str], allergens: set[str]) -> str: + assigned_allergens = sorted([(allergen, set(predict_ingredients(data, allergen))) for allergen in allergens], key=lambda e: len(e[1])) + + bijection = [] + while len(assigned_allergens[len(assigned_allergens)-1][1]) > 1: + sorted_allergens = assigned_allergens.copy() + first_allergen, first_set = sorted_allergens[0] + bijection.append((first_allergen, first_set)) + assigned_allergens = [] + for i in range(1, len(sorted_allergens)): + next_allergen, next_set = sorted_allergens[i] + assigned_allergens.append((next_allergen, next_set.difference(first_set))) + assigned_allergens = sorted(assigned_allergens, key=lambda e: len(e[1])) + bijection += assigned_allergens + + result = ",".join([i for (a, i) in sorted(list(map(lambda elem: (elem[0], next(iter(elem[1]))), bijection)), key=lambda e: e[0])]) + return result -solve_p2(DATA, INGREDIENTS, ALLERGENS) +print(solve_p2(DATA, INGREDIENTS, ALLERGENS))