#advent of code 2024 #day 08 #cool xMin, yMin, xMax, yMax = 0,0,0,0; #map bounds antennas = {}; #dictionary of antennas antinodes1 = set(); #antinodes for part 1 antinodes2 = set(); #anitnodes for part 2 f = open("08.in","r"); for y,l in enumerate(f): yMax = max(yMax,y); for x, c in enumerate(l[:-1]): xMax = max(xMax,x); if c != ".": if antennas.get(c,None) == None: antennas[c] = []; antennas[c].append((x,y)); f.close(); for antenna in antennas: #for each antenna for a1 in antennas[antenna]: #for each instance of that antenna for a2 in antennas[antenna]: #for each counterpart of that instance if a1 == a2: continue; #antenna can't have the antinode on its own a1x, a1y = a1; a2x, a2y = a2; dx = a2x-a1x; dy = a2y-a1y; if (xMin <= a1x-dx <= xMax) and (yMin <= a1y-dy <= yMax): antinodes1.add((a1x-dx,a1y-dy)); antinodes2.add((a1x,a1y)); while True: ax = a1x-dx; ay = a1y-dy; if not ((xMin <= ax <= xMax) and (yMin <= ay <= yMax)): break; antinodes2.add((ax,ay)); a1x = ax; a1y = ay; print("part 1 =", len(antinodes1)); print("part 2 =", len(antinodes2));