Day 10 - Advent of Code 2016
Working solution for the day 10 puzzles.
Parts One and Two
""" day_10_01_02.py """
# usage: python3 day_10_01_02.py 17 61 < input
from collections import defaultdict
import sys
target = int(sys.argv[1]), int(sys.argv[2])
data = defaultdict(list)
rules = {}
while True:
try:
line = input()
tokens = line.split()
if tokens[0] == 'value':
bot = int(tokens[5])
data[('bot', bot)].append(int(tokens[1]))
elif tokens[0] == 'bot':
rules[int(tokens[1])] = (tokens[5], int(tokens[6]),
tokens[10], int(tokens[11]))
except EOFError:
break
while any(len(chips) > 1 for (i, j), chips in data.items() if i == 'bot'):
for (i, bot) in list(data):
if i == 'bot' and len(data[(i, bot)]) > 1:
data[(i, bot)].sort()
low = data[(i, bot)].pop(0)
high = data[(i, bot)].pop()
if (low, high) == target:
print(f'part 1 - {bot}')
data[(rules[bot][0], rules[bot][1])].append(low)
data[(rules[bot][2], rules[bot][3])].append(high)
ans = data[('output', 0)][0] * data[('output', 1)][0] * data[('output', 2)][0]
print(f'part 2 - {ans}')