| 12345678910111213141516171819202122 |
- #!/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))
|