Advertisement
HexTree

Advent of Code 2022 Day 18

Dec 18th, 2022 (edited)
1,494
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.53 KB | Source Code | 0 0
  1. cubes = set()
  2. nbr_pairs = 0
  3.  
  4. min_v = 1
  5. max_v = 10
  6.  
  7. with open('input', 'r') as f:
  8.     for line in f.readlines():
  9.         x,y,z = (int(a) for a in line.split(','))
  10.         for k in (x, y, z):
  11.             min_v = min(min_v, k)
  12.             max_v = max(max_v, k)
  13.         cubes.add((x,y,z))
  14.  
  15.         for delta in ((-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)):
  16.             nbr = (x+delta[0], y+delta[1], z+delta[2])
  17.             if nbr in cubes:
  18.                 nbr_pairs += 1
  19.  
  20. # part 1
  21. print(6*len(cubes) - 2*nbr_pairs)
  22.  
  23. lower_bound = min_v - 1
  24. upper_bound = max_v + 1
  25.  
  26.  
  27. def get_nbrs(pos):
  28.     x, y, z = pos
  29.     nbrs = []
  30.     for delta in ((-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0), (0, 0, -1), (0, 0, 1)):
  31.         nbr = (x + delta[0], y + delta[1], z + delta[2])
  32.         for k in nbr:
  33.             if not (lower_bound <= k <= upper_bound):
  34.                 break
  35.         else:
  36.             nbrs.append(nbr)
  37.     return nbrs
  38.  
  39. # dfs
  40. def dfs(start):
  41.     q = [start]
  42.     closed_set = set()
  43.     closed_set.add(start)
  44.  
  45.     while q:
  46.         current = q.pop()
  47.  
  48.         for nbr in get_nbrs(current):
  49.             if nbr in closed_set:
  50.                 continue
  51.             if nbr in cubes:
  52.                 continue
  53.             q.append(nbr)
  54.             closed_set.add(nbr)
  55.  
  56.     return closed_set
  57.  
  58. # part 2
  59. steam_cells = dfs((lower_bound, lower_bound, lower_bound))
  60.  
  61. result = 0
  62. for cube in cubes:
  63.     for nbr in get_nbrs(cube):
  64.         if nbr in steam_cells:
  65.             result += 1
  66.  
  67. print(result)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement