02.1, 02.2, 03.1, 03.2
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user