[WIP] Solution to problem 10 part 1 in Python

This commit is contained in:
David Doblas Jiménez 2022-05-08 21:03:47 +02:00
parent 570d2bc4f0
commit 711995922e
1 changed files with 75 additions and 0 deletions

75
src/Year_2016/P10.py Normal file
View File

@ -0,0 +1,75 @@
# --- Day 10: Balance Bots ---
# You come upon a factory in which many robots are zooming around handing small
# microchips to each other.
# Upon closer examination, you notice that each bot only proceeds when it has
# two microchips, and once it does, it gives each one to a different bot or
# puts it in a marked "output" bin. Sometimes, bots take microchips from
# "input" bins, too.
# Inspecting one of the microchips, it seems like they each contain a single
# number; the bots must use some logic to decide what to do with each chip.
# You access the local control computer and download the bots' instructions
# (your puzzle input).
# Some of the instructions specify that a specific-valued microchip should be
# given to a specific bot; the rest of the instructions indicate what a given
# bot should do with its lower-value or higher-value chip.
# For example, consider the following instructions:
# value 5 goes to bot 2
# bot 2 gives low to bot 1 and high to bot 0
# value 3 goes to bot 1
# bot 1 gives low to output 1 and high to bot 0
# bot 0 gives low to output 2 and high to output 0
# value 2 goes to bot 2
# Initially, bot 1 starts with a value-3 chip, and bot 2 starts with a
# value-2 chip and a value-5 chip.
# Because bot 2 has two microchips, it gives its lower one (2) to bot 1 and
# its higher one (5) to bot 0.
# Then, bot 1 has two microchips; it puts the value-2 chip in output 1 and
# gives the value-3 chip to bot 0.
# Finally, bot 0 has two microchips; it puts the 3 in output 2 and the 5 in
# output 0.
# In the end, output bin 0 contains a value-5 microchip, output bin 1 contains
# a value-2 microchip, and output bin 2 contains a value-3 microchip. In this
# configuration, bot number 2 is responsible for comparing value-5 microchips
# with value-2 microchips.
# 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
with open("files/P10.txt") as f:
instructions = [line for line in f.read().strip().split("\n")]
bots_dic = collections.defaultdict(list)
pipeline = {}
for line in instructions:
if line.startswith("value"):
value, bot = map(int, re.findall(r"\d+", line))
bots_dic[bot].append(value)
if line.startswith("bot"):
bot, low, high = map(int, re.findall(r"\d+", line))
given_to = re.findall(r" (bot|output)", line)
pipeline[bot] = (given_to[0], low), (given_to[1], high)
def part_1():
while bots_dic:
for k, v in bots_dic.items():
if len(v) == 2:
v1, v2 = sorted(bots_dic.pop(k))
if v1 == 17 and v2 == 61:
print(k)
if __name__ == "__main__":
part_1()