06_math.py 711 B

12345678910111213141516171819202122
  1. #!/usr/bin/env python3
  2. import sys
  3. from functools import reduce
  4. from operator import add, mul
  5. def parse(f):
  6. lines = f.readlines()
  7. indices, ops = zip(*((i, (add, mul)['+*'.index(char)])
  8. for i, char in enumerate(lines.pop())
  9. if char in '+*'))
  10. indices += (len(lines[-1]),)
  11. for i, op in enumerate(ops):
  12. start, end = indices[i:i + 2]
  13. nums = tuple(line[start:end - 1] for line in lines)
  14. yield op, nums
  15. def transpose(nums):
  16. return tuple(int(''.join(n)) for n in zip(*nums))
  17. ops = list(parse(sys.stdin))
  18. print(sum(reduce(op, map(int, nums)) for op, nums in ops))
  19. print(sum(reduce(op, transpose(nums)) for op, nums in ops))