Advertisement
TwoShedsDerrick

Untitled

Dec 24th, 2022
381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.99 KB | None | 0 0
  1. import pathlib
  2.  
  3. with pathlib.Path("day24.txt").open('r') as f:
  4.     L = [l.rstrip() for l in f.readlines()]
  5.     w, h = len(L[0]) - 2, len(L) - 2
  6.     Bn = {(i, j, L[i+1][j+1]) for i in range(h) for j in range(w) if L[i+1][j+1] not in ('#', '.')}
  7.  
  8. M = {'>': (0, 1), '<': (0, -1), 'v': (1, 0), '^': (-1, 0), 0: (0, 0)}
  9. T = 0
  10. B = None
  11.  
  12. def traverse(start, end):
  13.     global T, B, Bn
  14.     pos = [(start[0], start[1], T)]
  15.     v = set()
  16.     while pos:
  17.         i, j, t = pos.pop(0)
  18.         if B is None or t > T: # evolve
  19.             B = Bn
  20.             Bn = {((i+M[c][0])%h, (j+M[c][1])%w, c)  for i, j, c in B}
  21.             T = t
  22.  
  23.         for X, Y in ((i+x, j+y) for x, y in M.values()):
  24.             if X == end[0] and Y == end[1]: return
  25.             if ((X, Y) != start) and (X < 0 or Y < 0 or X >= h or Y >= w): continue
  26.             if any(1 for d in M.keys() if d and (X, Y, d) in Bn): continue
  27.  
  28.             n = (X, Y, t+1)
  29.             if n not in v:
  30.                 pos.append(n)
  31.                 v.add(n)
  32.  
  33. traverse((-1, 0), (h, w-1))
  34. print(T+1)
  35. traverse((h, w-1), (-1, 0))
  36. traverse((-1, 0), (h, w-1))
  37.  
  38. print(T+1)
  39.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement