|
|
@@ -0,0 +1,22 @@
|
|
|
+#!/usr/bin/env python3
|
|
|
+import sys
|
|
|
+from functools import reduce
|
|
|
+from operator import add, mul
|
|
|
+
|
|
|
+def parse(f):
|
|
|
+ lines = f.readlines()
|
|
|
+ indices, ops = zip(*((i, (add, mul)['+*'.index(char)])
|
|
|
+ for i, char in enumerate(lines.pop())
|
|
|
+ if char in '+*'))
|
|
|
+ indices += (len(lines[-1]),)
|
|
|
+ for i, op in enumerate(ops):
|
|
|
+ start, end = indices[i:i + 2]
|
|
|
+ nums = tuple(line[start:end - 1] for line in lines)
|
|
|
+ yield op, nums
|
|
|
+
|
|
|
+def transpose(nums):
|
|
|
+ return tuple(int(''.join(n)) for n in zip(*nums))
|
|
|
+
|
|
|
+ops = list(parse(sys.stdin))
|
|
|
+print(sum(reduce(op, map(int, nums)) for op, nums in ops))
|
|
|
+print(sum(reduce(op, transpose(nums)) for op, nums in ops))
|