08_trees.py 835 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/env python3
  2. import sys
  3. def spread(grid, w, i):
  4. yield range(i + 1, i - i % w + w)
  5. yield range(i - 1, i - i % w - 1, -1)
  6. yield range(i + w, len(grid), w)
  7. yield range(i - w, -1, -w)
  8. def visible(grid, w):
  9. return sum(any(all(grid[j] < tree for j in d) for d in spread(grid, w, i))
  10. for i, tree in enumerate(grid))
  11. def score(grid, w, i):
  12. def walk(direction):
  13. vis = 0
  14. for j in direction:
  15. vis += 1
  16. if grid[j] >= grid[i]:
  17. break
  18. return vis
  19. right, left, down, up = map(iter, spread(grid, w, i))
  20. return walk(right) * walk(left) * walk(down) * walk(up)
  21. inp = sys.stdin.read()
  22. w = inp.index('\n')
  23. grid = [int(n) for n in inp if n != '\n']
  24. print(visible(grid, w))
  25. print(max(score(grid, w, i) for i, tree in enumerate(grid)))