Files
python-aoc-2023/day03/part2.py
Sebastian Seedorf e40de697eb Day 03
2023-12-05 16:25:04 +01:00

30 lines
868 B
Python

#!/usr/bin/env python3
import re
lines = (x.strip() for x in open("input.txt"))
result = 0
nums = [dict(), dict(), dict()]
signals = []
DIGIT = re.compile("\d+")
for idx, line in enumerate(lines):
next_num_items = [(idx, match.start(), match.end(), int(line[match.start():match.end()])) for match in DIGIT.finditer(line)]
next_num_items = {i: val for val in next_num_items for i in range(val[1], val[2])}
next_char_idxs = [j for j, char in enumerate(line) if char in "*"]
nums = nums[1:] + [next_num_items]
# check
for signal in signals:
found = set()
for i in range(signal-1, signal+2):
for j in range(0, 3):
if i in nums[j]:
found.add(nums[j][i])
if len(found) == 2:
result += found.pop()[3] * found.pop()[3]
signals = next_char_idxs
print(result)