04_wordsearch.py 810 B

1234567891011121314151617181920212223242526
  1. #!/usr/bin/env python3
  2. import sys
  3. grid = [line.rstrip() for line in sys.stdin]
  4. w = len(grid[0])
  5. h = len(grid)
  6. def read(x, y, dx, dy, remainder):
  7. return not remainder or (
  8. 0 <= x < w and
  9. 0 <= y < h and
  10. grid[y][x] == remainder[0] and
  11. read(x + dx, y + dy, dx, dy, remainder[1:])
  12. )
  13. def is_xmas(x, y):
  14. return sum(read(x, y, dx, dy, 'XMAS')
  15. for dx in range(-1, 2) for dy in range(-1, 2) if dx or dy)
  16. def is_x_mas(x, y):
  17. diag1 = grid[y - 1][x - 1] + grid[y][x] + grid[y + 1][x + 1]
  18. diag2 = grid[y + 1][x - 1] + grid[y][x] + grid[y - 1][x + 1]
  19. return diag1 in ('MAS', 'SAM') and diag2 in ('MAS', 'SAM')
  20. print(sum(is_xmas(x, y) for y in range(h) for x in range(w)))
  21. print(sum(is_x_mas(x, y) for y in range(1, h - 1) for x in range(1, w - 1)))