Files
aoc2023/03/03.py
T
2023-12-03 16:24:59 +03:00

40 lines
1.1 KiB
Python

inp = open('input.txt').read().strip().split('\n')
chars = [(i, j, c) for i, line in enumerate(inp) for j, c in enumerate(line) if c!='.' and not '0'<=c<='9']
nums = []
for i, line in enumerate(inp):
line = '.'+line+'.'
for j, (l, r) in enumerate(zip(line, line[1:])):
if not l.isdigit() and r.isdigit():
s = j-1
if l.isdigit() and not r.isdigit():
nums.append((i, s+1, j-1-s, int(line[s+2:j+1])))
places = {}
for n, (i, j, l, _) in enumerate(nums):
for k in range(j, j+l):
places[(i, k)] = n
sel = set()
neigh = {(di, dj) for di in range(-1, 2) for dj in range(-1, 2)} - {(0,0)}
for i, j, _ in chars:
for di, dj in neigh:
if (i+di, j+dj) in places:
sel.add(places[(i+di, j+dj)])
print(sum(nums[i][3] for i in sel))
from math import prod
s = 0
for i, j, _ in filter(lambda x: x[2]=='*', chars):
sel = set()
for di, dj in neigh:
if (i+di, j+dj) in places:
sel.add(places[(i+di, j+dj)])
if len(sel)==2:
s += prod(nums[i][3] for i in sel)
print(s)