diff --git a/src/Year_2016/P10.py b/src/Year_2016/P10.py index e81761a..5a83c25 100644 --- a/src/Year_2016/P10.py +++ b/src/Year_2016/P10.py @@ -43,14 +43,15 @@ # Based on your instructions, what is the number of the bot that is responsible # for comparing value-61 microchips with value-17 microchips? -import collections import re -from copy import copy +from collections import defaultdict +from math import prod with open("files/P10.txt") as f: instructions = [line for line in f.read().strip().split("\n")] -bots_dic = collections.defaultdict(list) +bots_dic: dict[int, list] = defaultdict(list) +outputs_dic: dict[int, list] = defaultdict(list) pipeline = {} for line in instructions: @@ -63,7 +64,7 @@ for line in instructions: pipeline[bot] = (given_to[0], low), (given_to[1], high) -def part_1(): +def part_1() -> None: found = False while not found: for bot, value in dict(bots_dic).items(): @@ -78,5 +79,26 @@ def part_1(): bots_dic[high].append(high_val) +# --- Part Two --- + +# What do you get if you multiply together the values of one chip in each of +# outputs 0, 1, and 2? + + +def part_2() -> None: + types = {"bot": bots_dic, "output": outputs_dic} + while bots_dic: + for bot, value in dict(bots_dic).items(): + if len(value) == 2: + low_val, high_val = sorted(bots_dic.pop(bot)) + (t1, low), (t2, high) = pipeline[bot] + types[t1][low].append(low_val) + types[t2][high].append(high_val) + + res = prod(outputs_dic[k][0] for k in [0, 1, 2]) + print(f"The answer is {res}") + + if __name__ == "__main__": part_1() + part_2()