09_smoke.py 658 B

1234567891011121314151617181920
  1. #!/usr/bin/env python3
  2. import sys
  3. def parse(content):
  4. w = content.find('\n') + 1
  5. return list(map(int, content.replace('\n', '9') + w * '9')), w
  6. def visit(heights, w, i, visited):
  7. visited.add(i)
  8. return 1 + sum(visit(heights, w, nb, visited)
  9. for nb in (i - 1, i + 1, i - w, i + w)
  10. if heights[nb] < 9 and nb not in visited)
  11. heights, w = parse(sys.stdin.read())
  12. low = [i for i, height in enumerate(heights)
  13. if all(height < heights[nb] for nb in (i - 1, i + 1, i - w, i + w))]
  14. print(sum(heights[i] + 1 for i in low))
  15. a, b, c = sorted(visit(heights, w, i, set()) for i in low)[-3:]
  16. print(a * b * c)