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