10_trails.py 860 B

1234567891011121314151617181920212223242526
  1. #!/usr/bin/env python3
  2. import sys
  3. from collections import Counter
  4. def trail_ends(grid, headx, heady):
  5. h = len(grid)
  6. w = len(grid[0])
  7. work = [(headx, heady, 0, set())]
  8. while work:
  9. x, y, num, visited = work.pop()
  10. if num == 9:
  11. yield x, y
  12. else:
  13. for nb in ((x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)):
  14. nx, ny = nb
  15. if 0 <= nx < w and 0 <= ny < h and grid[ny][nx] == num + 1 \
  16. and nb not in visited:
  17. work.append((nx, ny, num + 1, visited | {nb}))
  18. grid = [list(map(int, line[:-1])) for line in sys.stdin]
  19. trails = [Counter(trail_ends(grid, x, y))
  20. for y, row in enumerate(grid)
  21. for x, num in enumerate(row)
  22. if num == 0]
  23. print(sum(map(len, trails)))
  24. print(sum(sum(t.values()) for t in trails))