SimonJkAdamek

AOC day 12

Dec 12th, 2022
1,173
-1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.43 KB | Source Code | 0 1
  1. import time
  2.  
  3. start_time=time.time()
  4.  
  5. data=[]
  6. with open("input.txt") as file:
  7.     for idx1,line in enumerate(file):
  8.         data.append([])
  9.         for idx2,char in enumerate(line.strip()):
  10.             data[idx1].append(char)
  11.             if char=="S":
  12.                 S=(idx1,idx2)
  13.                 data[S[0]][S[1]]="a"
  14.             elif char=="E":
  15.                 E=(idx1,idx2)
  16.                 data[E[0]][E[1]]="z"
  17.  
  18.  
  19. def BFS(data,start,end,part2):
  20.     dirs = [[0, 1], [0, -1], [1, 0], [-1, 0]]
  21.    
  22.     row = len(data)
  23.     col = len(data[0])
  24.  
  25.     visited=[]
  26.  
  27.     q = []
  28.     q.append(start)
  29.  
  30.     v=[[0 for i in range(col)] for _ in range(row)]
  31.    
  32.     while(len(q) > 0) :
  33.         p = q[0]
  34.         q.pop(0)
  35.            
  36.        
  37.         if part2 and data[p[0]][p[1]]=="a":
  38.             return (v[p[0]][p[1]])
  39.         elif not part2 and p==end:
  40.             return v[end[0]][end[1]]
  41.  
  42.         for i in range(4) :
  43.             a = p[0] + dirs[i][0]
  44.             b = p[1] + dirs[i][1]
  45.  
  46.             if(a >= 0 and b >= 0 and a < row and b < col and (ord(data[a][b])>=ord((data[p[0]][p[1]])) or ord(data[a][b])+1==ord((data[p[0]][p[1]]))) and (a,b) not in visited):  
  47.                 q.append((a, b))
  48.                 visited.append((a,b))
  49.                 v[a][b]=v[p[0]][p[1]]+1
  50.  
  51.     return None
  52.  
  53.  
  54.  
  55. print("Part 1:",BFS(data,E,S,False))
  56. print("Part 2:",BFS(data,E,S,True))
  57.  
  58. end=time.time()
  59. print("Time:", end-start_time)
  60.  
Advertisement
Add Comment
Please, Sign In to add comment