From dc44be89bf571bc9b6bd405af13ff04f3262d187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Engl=C3=B6f=20Ytterstr=C3=B6m?= Date: Sun, 8 Dec 2024 18:40:20 +0100 Subject: [PATCH] Solve 2024:8 p1-2 "Resonant Collinearity" As many have said, the puzzle text this day was a bit challenging to parse and understand. Especially this part of pt 2 was easy to miss: > In fact, the three T-frequency *antennas* are all > exactly in line with two antennas, > so *they are all also antinodes*! not including the antennas in pt 2 gave an slightly too low answer. --- 2024-python/output/day_08.py | 44 ++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 2024-python/output/day_08.py diff --git a/2024-python/output/day_08.py b/2024-python/output/day_08.py new file mode 100644 index 0000000..1f7614e --- /dev/null +++ b/2024-python/output/day_08.py @@ -0,0 +1,44 @@ +from collections import defaultdict, deque +from itertools import permutations + +from output import matrix + + +def solve(data): + grid, H, W = matrix(data) + antennas = defaultdict(list) + for row, col in [ + (row, col) + for row, row_values in enumerate(grid) + for col, _vc in enumerate(row_values) + ]: + if (id := grid[row][col]) != ".": + antennas[id].append((row, col)) + adjacent_locs = set() + all_antinodes = set() + for k, v in antennas.items(): + for a, b in permutations(v, r=2): + all_antinodes.add(a) + a1, a2 = a + b1, b2 = b + delta_y, delta_x = a1 - b1, a2 - b2 + y, x = a1 + delta_y, a2 + delta_x + if 0 <= y < H and 0 <= x < W: + adjacent_locs.add((y, x)) + queue = deque([(y, x, delta_y, delta_x)]) + while queue: + y, x, delta_y, delta_x = queue.popleft() + if 0 <= y < H and 0 <= x < W: + all_antinodes.add((y, x)) + queue.append((y + delta_y, x + delta_x, delta_y, delta_x)) + return len(adjacent_locs), len(all_antinodes) + + +if __name__ == "__main__": + with open("./input/08.txt", "r") as f: + inp = f.read().strip() + + p1, p2 = solve(inp) + + print(p1) + print(p2)