41 lines
926 B
Python
41 lines
926 B
Python
|
|
import re
|
||
|
|
from math import prod
|
||
|
|
|
||
|
|
|
||
|
|
def solve(data):
|
||
|
|
p1 = 0
|
||
|
|
p2 = 0
|
||
|
|
rows = data.splitlines()
|
||
|
|
J = max(len(r) for r in rows) + 1
|
||
|
|
rows = [r.ljust(J) for r in rows]
|
||
|
|
ops = rows.pop()
|
||
|
|
s = 0
|
||
|
|
for ows in re.findall(r"(\S\s+)", ops):
|
||
|
|
o, *ws = ows
|
||
|
|
e = s + len(ws)
|
||
|
|
col = [ns for ns in [r[s:e] for r in rows]]
|
||
|
|
s += len(ows)
|
||
|
|
col1 = [int(r) for r in col]
|
||
|
|
col2 = [int("".join([nsc for nsc in ns if nsc.isdigit()])) for ns in zip(*col)]
|
||
|
|
match o:
|
||
|
|
case "*":
|
||
|
|
p1 += prod(col1)
|
||
|
|
p2 += prod(col2)
|
||
|
|
case "+":
|
||
|
|
p1 += sum(col1)
|
||
|
|
p2 += sum(col2)
|
||
|
|
return p1, p2
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
with open("./input/06.txt", "r") as f:
|
||
|
|
inp = f.read().strip()
|
||
|
|
|
||
|
|
p1, p2 = solve(inp)
|
||
|
|
|
||
|
|
print(p1)
|
||
|
|
print(p2)
|
||
|
|
|
||
|
|
assert p1 == 5524274308182
|
||
|
|
assert p2 == 8843673199391
|