07_operators.py 714 B

1234567891011121314151617181920212223
  1. #!/usr/bin/env python3
  2. import sys
  3. from functools import reduce
  4. from itertools import product
  5. from operator import add, mul
  6. def parse(line):
  7. result, operands = line.split(': ', 1)
  8. return int(result), tuple(map(int, operands.split()))
  9. def solve(result, nums, operators):
  10. return any(reduce(lambda a, b: next(ops)(a, b), nums) == result
  11. for ops in map(iter, product(operators, repeat=len(nums) - 1)))
  12. def concat(a, b):
  13. b_digits = 1
  14. while b_digits <= b:
  15. b_digits *= 10
  16. return a * b_digits + b
  17. expr = list(map(parse, sys.stdin))
  18. print(sum(res for res, op in expr if solve(res, op, (add, mul))))
  19. print(sum(res for res, op in expr if solve(res, op, (add, mul, concat))))