From 6645309667a831ffcf27e0a9ef2b4c5ade60bd1d Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Sun, 8 Dec 2024 13:47:50 +0100 Subject: Add 2024 day 8 solutions --- 2024/08/puzzles.py | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 2024/08/puzzles.py (limited to '2024/08/puzzles.py') diff --git a/2024/08/puzzles.py b/2024/08/puzzles.py new file mode 100644 index 0000000..87c4c46 --- /dev/null +++ b/2024/08/puzzles.py @@ -0,0 +1,40 @@ +#!/usr/bin/python3 + +import collections +import itertools + + +type Antennas = defaultdict[str, list[complex]] + + +def main() -> None: + with open("input", "r") as f: + data = [x.rstrip() for x in f.readlines()] + w, h = len(data[0]), len(data) + + antennas: Antennas = collections.defaultdict(list) + antinodes: set[complex] = set() + + for y, row in enumerate(data): + for x, ch in enumerate(row): + if ch != '.': + antennas[ch].append(complex(x, y)) + + for coords in antennas.values(): + for a, b in itertools.combinations(coords, 2): + v⃗ = a - b + u⃗ = b - a + # START PART 1 + antinodes.add(a + u⃗*2) + antinodes.add(b + v⃗*2) + # END PART 1 START PART 2 + for i in range(1, max(w, h)): + antinodes.add(a + u⃗*i) + antinodes.add(b + v⃗*i) + # END PART 2 + + print(sum(0 <= x.real < w and 0 <= x.imag < h for x in antinodes)) + + +if __name__ == "__main__": + main() \ No newline at end of file -- cgit v1.2.3