10_trails.py 738 B

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