Guest User

Untitled

a guest
Dec 4th, 2025
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.88 KB | None | 0 0
  1. def get_adjacent_tiles(grid, j, i):
  2.     deltas = (-1, 0, 1)
  3.     prev_tiles, adjacent_tiles = [], ""
  4.  
  5.     for i_delta in deltas:
  6.         for j_delta in deltas:
  7.             i_delta = 0 if i == 0 and i_delta < 0 else i_delta
  8.             j_delta = 0 if j == 0 and j_delta < 0 else j_delta
  9.  
  10.             if i_delta == j_delta == 0:
  11.                 continue
  12.             elif (j + j_delta, i + i_delta) in prev_tiles:
  13.                 continue
  14.  
  15.             try:
  16.                 adjacent_tiles += grid[j + j_delta][i + i_delta]
  17.                 prev_tiles.append((j + j_delta, i + i_delta))
  18.             except:
  19.                 pass
  20.  
  21.     return adjacent_tiles
  22.  
  23. @timer
  24. def process_v1(data, too_many_rolls=4, tile_tracking=False):
  25.     tiles = {"empty": ".", "roll": "@"}
  26.     grid = [list(lane) for lane in data]
  27.     reachable_rolls, reachable_tiles = 0, []
  28.     tiles_per_lane, total_lanes = len(grid[0]), len(grid)
  29.  
  30.     for i in range(tiles_per_lane):
  31.         for j in range(total_lanes):
  32.             if grid[j][i] == tiles["empty"]:
  33.                 continue
  34.  
  35.             adjacent_tiles = get_adjacent_tiles(grid, j, i)
  36.             if adjacent_tiles.count(tiles["roll"]) < too_many_rolls:
  37.                 reachable_rolls += 1
  38.                 reachable_tiles.append((j, i))
  39.  
  40.     if tile_tracking:
  41.         return reachable_rolls, reachable_tiles
  42.     else:
  43.         return reachable_rolls
  44.  
  45. @timer
  46. def process_v2(data):
  47.     tiles = {"empty": ".", "roll": "@"}
  48.     done = False
  49.     reachable_rolls = 0
  50.     grid = [list(lane) for lane in data]
  51.  
  52.     while not done:
  53.         new_reachable_rolls, new_reachable_tiles = process_v1(grid, tile_tracking=True)
  54.         reachable_rolls += new_reachable_rolls
  55.  
  56.         for tile in new_reachable_tiles:
  57.             grid[tile[0]][tile[1]] = tiles["empty"]
  58.  
  59.         if new_reachable_rolls == 0:
  60.             done = True
  61.  
  62.     return reachable_rolls
Advertisement
Add Comment
Please, Sign In to add comment