02.1, 02.2, 03.1, 03.2

This commit is contained in:
2023-12-03 16:24:59 +03:00
parent 34740e6c4c
commit 9a38d895f0
4 changed files with 304 additions and 0 deletions
+39
View File
@@ -0,0 +1,39 @@
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)