Created
January 27, 2017 03:12
-
-
Save graffic/3c06cdf89fdee4ab707874aeb5e513a2 to your computer and use it in GitHub Desktop.
bkkhack tournament
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
maze = """XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
XXX.XXXXX XXXXX XXXXXXXXXXX | |
XXX XXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX XXXXXXXXXXX | |
XXX XX XXXXXXXX XXX XXXX XXXXX XXXX | |
XXX XX XXXXXXXXXXXXXX XXXXXXXX XXX XXXX XXXXX XXXX | |
XXX XX XXXXXXXXXXXXXX XX X XXX XXX XXXX XXXXX XXXX | |
XXX XX XXX XXXXXX XX X XXX XXX XXXX XXXXX XXXX | |
XXX XX XXX XXX XXXXXX XX X XXX XXX XXXX XXXXX XXXX | |
XXX XX XXX XXX XXXXXX XX X XXX XXXXXXXXXX XXXXX XXXX | |
XXX XX XXX XXXXXX XX X XXX XXXXX XXXXX XXXX | |
XXX XXXXXXXXXX XXXXXX XX X XXXXXXXX XXXXX XXXXX XXXX | |
XXX XXX XXXXXX XXXXXXXX XXX XXXXX XXXXX XXXX | |
XXX XXX XXXXXXXXXXXXX XXX XXX XXXXX XXXXX XXXX | |
XXX XXX XX XXXXXXX XXX XXX XXXXX XXXXXXXXXXX | |
XXX XXX XXX XXXXXXXX XXXXX . | |
XXXXXXXXXXX XXX XXXXXXXXXXXXXXXXX | |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX | |
""" | |
class MazeSolver: | |
def __init__(self, maze, x, y): | |
self.__maze = maze.split('\n') | |
self.__previous_x = None | |
self.__previous_y = None | |
self.__x = x | |
self.__y = y | |
self.__steps = None | |
def steps(self): | |
if self.__steps is None: | |
self.__solve() | |
return self.__steps | |
def __solve(self): | |
self.__steps = 0 | |
while True: | |
self.__down() or self.__right() or self.__left() or self.__up() | |
self.__steps += 1 | |
if self.__maze[self.__y][self.__x] == '.': | |
break | |
def __down(self): | |
return self.__move(self.__x, self.__y + 1) | |
def __right(self): | |
return self.__move(self.__x + 1, self.__y) | |
def __left(self): | |
return self.__move(self.__x - 1, self.__y) | |
def __up(self): | |
return self.__move(self.__x, self.__y - 1) | |
def __move(self, next_x, next_y): | |
# Wrong coordinates | |
if (next_x < 0 or next_y < 0 or next_y >= len(self.__maze) or | |
next_x >= len(self.__maze[next_y])): | |
return False | |
# Previous position | |
if next_x == self.__previous_x and next_y == self.__previous_y: | |
return False | |
# Cannot move to an X | |
if self.__maze[next_y][next_x] == 'X': | |
return False | |
# We have an space or a dot, so we can move | |
self.__previous_x = self.__x | |
self.__previous_y = self.__y | |
self.__x = next_x | |
self.__y = next_y | |
return True | |
if __name__ == "__main__": | |
print MazeSolver(maze, 3, 1).steps() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Let's use only functions and closures.