import sys from pprint import pprint #colors from termcolor import colored grid = [] log = True def p(x,steps): global log if log: for idx,i in enumerate(x): for jdx,j in enumerate(i): if j == 'S': print(colored(j,'red'),end='') elif (idx,jdx) in steps: print(colored(j,'green'),end='') else: print(j,end='') print() def start_coords(grid): for ydx,y in enumerate(grid): for xdx,x in enumerate(y): if x == 'S': return (xdx,ydx) with open(sys.argv[1]) as file: for line in file: grid.append(line.rstrip()) for ldx,line in enumerate(grid): grid[ldx] = line.translate(str.maketrans("-|F7LJ.", "─│┌┐└┘ ")) steps = [] #p(grid,steps) found = False start = start_coords(grid) cur = start prev = cur count = 0 def wall(loc): return grid[loc[1]][loc[0]] """ steps = [(3,3),(2,3),(4,3),(3,2),(3,4)] tmps = [] for i in steps: tmps.append(i) p(grid,tmps) input() exit() """ y = cur[0] x = cur[1] print('Right is ' + wall((y+1,x)) + grid[x][y+1],end='') print((y+1,x)) print('Left is ' + wall((y-1,x)) + grid[x][y-1],end='') print((y-1,x)) print('Up is ' + wall((y,x-1)) + grid[x-1][y],end='') print((y,x-1)) print('Down is ' + wall((y,x+1)) + grid[x+1][y],end='') print((y,x+1)) print() p(grid,steps) while not found: y = cur[0] x = cur[1] sub_found = False print('Start: ' + str(cur) + ' ' + wall(cur)) dirc = '' print('Trying to find way') print('Previous is ' + str(prev) + wall(prev)) if y+1 < len(grid[0]) and not sub_found: # Right new = (list(cur)[0]+1,list(cur)[1]) if grid[x][y+1] in ('─','┐','┘') and new != prev: print('Trying Right') print('prev: ' + str(prev) + ' cur: ' + str(cur) + ' new: ' + str(new)) dirc = 'R' if wall(cur) in ('─','┌','└','S'): print('Went Right') prev = (y,x) y += 1 sub_found = True else: print('Cant go right cus ' + str(y) + ' < ' + str(len(grid))) if y > 0 and not sub_found: # Left new = (list(cur)[0]-1,list(cur)[1]) if grid[x][y-1] in ('─','┌','└') and new != prev: print('Trying Left') print('prev: ' + str(prev) + ' cur: ' + str(cur) + ' new: ' + str(new)) dirc = 'L' if wall(cur) in ('─','┐','┘','S'): print('Went Left') y -= 1 sub_found = True else: print('Cant go left cus ' + str(y) + ' > ' + str(0)) if x > 0 and not sub_found: # Up new = (list(cur)[0],list(cur)[1]-1) if grid[x-1][y] in ('│','┌','┐') and new != prev: print('Trying Up') print('prev: ' + str(prev) + ' cur: ' + str(cur) + ' new: ' + str(new)) dirc = 'U' if wall(cur) in ('│','└','┘','S'): print('Went Up') x -=1 sub_found = True if x < len(grid) and not sub_found: # Down new = (list(cur)[0],list(cur)[1]+1) if grid[x+1][y] in ('│','└','┘') and new != prev: print('Trying Down') print('prev: ' + str(prev) + ' cur: ' + str(cur) + ' new: ' + str(new)) dirc = 'D' if wall(cur) in ('│','┌','┐','S'): print('Went Down') x += 1 sub_found = True cur = (y,x) steps.append((x,y)) print('Going ' + dirc + ' to ' + str(cur) + ' ' + wall(cur)) print('Previous is ' + str(prev) + ' ' + wall(prev)) p(grid,steps) print() input() count += 1 if cur == start: found = True print(count)