Guest User

Untitled

a guest
Nov 20th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. from collections import namedtuple
  2. from itertools import product
  3.  
  4. Coordinate = namedtuple('Coordinate', 'row column')
  5. GRID_MIN = Coordinate(ord('A'), 0)
  6. GRID_MAX = Coordinate(ord('Y'), 24)
  7.  
  8.  
  9. def get_local_grid(coordinate):
  10. for relative_row, relative_column in product(range(-1, 2), range(-1, 2)):
  11. absolute_row = coordinate.row + relative_row
  12. absolute_column = coordinate.column + relative_column
  13. yield Coordinate(absolute_row, absolute_column)
  14.  
  15.  
  16. def get_surrounding_coordinates(coordinate):
  17. for local_coordinate in get_local_grid(coordinate):
  18. if is_on_grid(local_coordinate) and local_coordinate != coordinate:
  19. yield local_coordinate
  20.  
  21.  
  22. def get_neighbors(letter_coordinate):
  23. coordinate = make_numeric_coordinate(letter_coordinate)
  24. return [make_letter_coordinate(coordinate) for coordinate in get_surrounding_coordinates(coordinate)]
  25.  
  26.  
  27. def is_on_grid(coordinate):
  28. return is_valid_row(coordinate) and is_valid_column(coordinate)
  29.  
  30.  
  31. def is_valid_row(coordinate):
  32. return GRID_MIN.row <= coordinate.row <= GRID_MAX.row
  33.  
  34.  
  35. def is_valid_column(coordinate):
  36. return GRID_MIN.column <= coordinate.column <= GRID_MAX.column
  37.  
  38.  
  39. def make_numeric_coordinate(letter_coordinate):
  40. return Coordinate(ord(letter_coordinate[0]), int(letter_coordinate[1:]))
  41.  
  42.  
  43. def make_letter_coordinate(coordinate):
  44. return f"{chr(coordinate.row)}{coordinate.column}"
Add Comment
Please, Sign In to add comment