Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from collections import namedtuple
- from itertools import product
- Coordinate = namedtuple('Coordinate', 'row column')
- GRID_MIN = Coordinate(ord('A'), 0)
- GRID_MAX = Coordinate(ord('Y'), 24)
- def get_local_grid(coordinate):
- for relative_row, relative_column in product(range(-1, 2), range(-1, 2)):
- absolute_row = coordinate.row + relative_row
- absolute_column = coordinate.column + relative_column
- yield Coordinate(absolute_row, absolute_column)
- def get_surrounding_coordinates(coordinate):
- for local_coordinate in get_local_grid(coordinate):
- if is_on_grid(local_coordinate) and local_coordinate != coordinate:
- yield local_coordinate
- def get_neighbors(letter_coordinate):
- coordinate = make_numeric_coordinate(letter_coordinate)
- return [make_letter_coordinate(coordinate) for coordinate in get_surrounding_coordinates(coordinate)]
- def is_on_grid(coordinate):
- return is_valid_row(coordinate) and is_valid_column(coordinate)
- def is_valid_row(coordinate):
- return GRID_MIN.row <= coordinate.row <= GRID_MAX.row
- def is_valid_column(coordinate):
- return GRID_MIN.column <= coordinate.column <= GRID_MAX.column
- def make_numeric_coordinate(letter_coordinate):
- return Coordinate(ord(letter_coordinate[0]), int(letter_coordinate[1:]))
- def make_letter_coordinate(coordinate):
- return f"{chr(coordinate.row)}{coordinate.column}"
Add Comment
Please, Sign In to add comment