diff --git a/src/planet.py b/src/planet.py index ec8f13c..5c1153a 100644 --- a/src/planet.py +++ b/src/planet.py @@ -32,51 +32,28 @@ next(x for (x, y), direction in planetmap[0]) next(y for x, y in planetmap[0] if x == (0, 0)) planetmap[0][next((x, y) for x, y in planetmap[0] if y == 'North')] ''' -class Planet: - """ - Contains the representation of the map and provides certain functions to manipulate it according to the specifications - """ +#Contains the representation of the map and provides certain functions to manipulate it according to the specifications +class Planet: def __init__(self): """ Initializes the data structure """ - self.planetmap = [{((0, 0), Direction.NORTH):((0, 1), Direction.SOUTH), "weight":1}] + self._planetmap = {} self.target = None + #Adds a bidirectional path defined between the start and end coordinates to the map and assigns the weight to it. def add_path(self, start: Tuple[Tuple[int, int], Direction], target: Tuple[Tuple[int, int], Direction], weight: int): - """ - Adds a bidirectional path defined between the start and end coordinates to the map and assigns the weight to it - - example: - add_path(((0, 3), Direction.NORTH), ((0, 3), Direction.WEST), 1) - """ - self.planetmap.append({start:target, "weight":weight}) - + if(start[0] not in self._planetmap): + self._planetmap[start[0]] = {} + if(start[1] not in self._planetmap[start[0]]): + self._planetmap[start[0]][start[1]] = (target[0], target[1], weight) + if(target[0] not in self._planetmap): + self._planetmap[target[0]] = {} + if(target[1] not in self._planetmap[target[0]]): + self._planetmap[target[0]][target[1]] = (start[0], start[1], weight) def get_paths(self) -> Dict[Tuple[int, int], Dict[Direction, Tuple[Tuple[int, int], Direction, Weight]]]: - """ - Returns all paths - - example: - get_paths() returns: { - (0, 3): { - Direction.NORTH: ((0, 3), Direction.WEST, 1), - Direction.EAST: ((1, 3), Direction.WEST, 2) - }, - (1, 3): { - Direction.WEST: ((0, 3), Direction.EAST, 2), - ... - }, - ... - } - """ - pass + return self._planetmap + #Returns a shortest path between two nodes def shortest_path(self, start: Tuple[int, int], target: Tuple[int, int]) -> Optional[List[Tuple[Tuple[int, int], Direction]]]: - """ - Returns a shortest path between two nodes - - examples: - shortest_path((0,0), (2,2)) returns: [((0, 0), Direction.EAST), ((1, 0), Direction.NORTH)] - shortest_path((0,0), (1,2)) returns: None - """ pass