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: #print('Can go right') # Right new = (list(cur)[0]+1,list(cur)[1]) #print(wall(new)) 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 if y > 0 and not sub_found: #print('Can go left') # Left new = (list(cur)[0]-1,list(cur)[1]) #print(wall(new)) found = True if wall(new) == 'S' else False 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') prev = (y,x) y -= 1 sub_found = True if x > 0 and not sub_found: #print('Can go up') # Up new = (list(cur)[0],list(cur)[1]-1) #print(wall(new)) found = True if wall(new) == 'S' else False 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') prev = (y,x) x -=1 sub_found = True if x < len(grid) and not sub_found: #print('Can go down') # Down new = (list(cur)[0],list(cur)[1]+1) #print(wall(new)) if wall(new) == 'S': #print('Found the S') found = True 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') prev = (y,x) x += 1 sub_found = True cur = (y,x) steps.append((x,y)) p(grid,steps) print('Going ' + dirc + ' to ' + str(cur) + ' ' + wall(cur)) print('Previous is ' + str(prev) + ' ' + wall(prev)) print() input() count += 1 #print(cur, start) p(grid,steps) print(count) print(count/2)