Advertisement
HexTree

Advent of Code 2022 Day 15

Dec 15th, 2022 (edited)
1,069
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.47 KB | Source Code | 0 0
  1. import re
  2.  
  3. scan_row = 2000000
  4. non_beacons = set()
  5.  
  6. discs = []
  7.  
  8. with open('input', 'r') as f:
  9.     for line in f.readlines():
  10.         sx, sy, bx, by = (int(z[1:]) for z in re.findall(r'=-?\d+', line))
  11.         radius = abs(bx-sx) + abs(by-sy)
  12.         discs.append((sx, sy, radius))
  13.  
  14.         dist_to_scan_row = abs(scan_row - sy)
  15.         num_steps_left = radius - dist_to_scan_row
  16.  
  17.         if num_steps_left < 0:
  18.             continue
  19.  
  20.         for x in range(sx - num_steps_left, sx + num_steps_left + 1):
  21.             pos = (x, scan_row)
  22.             if pos != (bx, by):
  23.                 non_beacons.add(pos)
  24.  
  25. print("part 1:", len(non_beacons))
  26.  
  27. def get_boundary(x, y, r):
  28.     temp = (x, y+r)
  29.     while temp != (x+r, y):
  30.         temp = (temp[0]+1, temp[1]-1)
  31.         yield temp
  32.     while temp != (x, y-r):
  33.         temp = (temp[0]-1, temp[1]-1)
  34.         yield temp
  35.     while temp != (x-r, y):
  36.         temp = (temp[0]-1, temp[1]+1)
  37.         yield temp
  38.     while temp != (x, y+r):
  39.         temp = (temp[0]+1, temp[1]+1)
  40.         yield temp
  41.  
  42. # part 2
  43. for x, y, r in discs:
  44.     print("disc {} {} {}".format(x, y, r))
  45.     for px, py in get_boundary(x, y, r+1):
  46.         if 0 <= px <= 4000000 and 0 <= py <= 4000000:
  47.             for dx, dy, dr in discs:
  48.                 if (abs(px-dx) + abs(py-dy)) <= dr:
  49.  
  50.                     break
  51.             else:
  52.                 print("beacon:", px, py)
  53.                 print("tuning freq:", 4000000 * px + py)
  54.                 break
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement