This commit is contained in:
Stefan Harmuth 2024-12-08 06:55:10 +01:00
parent ec5deff7b1
commit e240f48f52
3 changed files with 126 additions and 0 deletions

64
day08.py Normal file
View File

@ -0,0 +1,64 @@
from itertools import combinations
from tools.aoc import AOCDay
from typing import Any
from tools.grid import Grid
def get_antinode_count(grid: Grid, repeat: bool = False) -> int:
antinodes = set()
frequencies = set(grid.get(x) for x in grid.getActiveCells())
for frequency in frequencies:
antennas = set(x for x in grid.getActiveCells() if grid.get(x) == frequency)
if len(antennas) < 2:
continue
if repeat:
antinodes |= antennas
for pair in combinations(antennas, 2):
a, b = (pair[0], pair[1]) if pair[0] < pair[1] else (pair[1], pair[0])
diff = b - a
while grid.isWithinBoundaries(a - diff):
antinodes.add(a - diff)
if not repeat:
break
a -= diff
while grid.isWithinBoundaries(b + diff):
antinodes.add(b + diff)
if not repeat:
break
b += diff
return len(antinodes)
class Day(AOCDay):
inputs = [
[
(14, "input8_test"),
(413, "input8"),
],
[
(34, "input8_test"),
(1417, "input8"),
],
]
def parse_input(self) -> Grid:
grid = Grid.from_data(self.getInput(), default=False, translate={".": False})
grid.minX, grid.minY, grid.maxX, grid.maxY = 0, 0, len(self.getInput()[0]) - 1, len(self.getInput()) - 1
return grid
def part1(self) -> Any:
grid = self.parse_input()
return get_antinode_count(grid, repeat=False)
def part2(self) -> Any:
grid = self.parse_input()
return get_antinode_count(grid, repeat=True)
if __name__ == "__main__":
day = Day(2024, 8)
day.run(verbose=True)

50
inputs/input8 Normal file
View File

@ -0,0 +1,50 @@
.....E........................s.......n.........g.
.............................c............4.......
........................................4.........
....................................5.....e.......
...............p...........c......................
....h................s...................e........
h..................1...........s..Ke............C.
.......................1...............g.....KC...
........8.......B.....p..kc................K..e.X.
...b.........pI...k..................r.........C.X
...........................5.n............R.r.....
j......Z....tApE..............c....5..g.X.........
............E..L......5............X..............
b...................D...................K.....R..4
..k..D.....h..A...........L.1.....................
.j...........h......B.......A.....................
.........I......b..................4.......r....0.
.................B.n..........G...................
..........9.I...............U...................2.
.........Doy........s...............U....R........
..........................G.....V............R....
...z.o.......I..E....t.....G..n....3..............
.Z.........Aj..................W.......M.U........
..Z......k......O....W.....U........M.......0.....
.....z......o.O..........a....ZG..................
........L..........Y............a.................
......D8t...S.......WO............................
......1P..........WO.9..F.w........Q..d....0......
..........y............................x..........
............z..........w.........J................
.o...t..P.........w..B......F....v........x....2..
y..8...........v.......M.................x.......2
.....y..........z..N...H.......6........a.........
....N.S............H...................a..........
N........S..........v........m....................
......8...........H........7x....6.l..............
.............q.P...............w..m...............
.....S......................7.6.......T...........
...............................0....3.6....J......
...N..........v.................m.......3.l.J.....
...........................F..d....7.3............
...............u..................................
.V....Y..u..........H.......J.............T.......
.......V...q...................d..fF.............T
..u................................f.....T......l.
..................................i...............
...Y......M.........................7.............
............Y...........9............f2..m..Q.....
.....................i.9........fd.......l....Q...
V.........q................i......................

12
inputs/input8_test Normal file
View File

@ -0,0 +1,12 @@
............
........0...
.....0......
.......0....
....0.......
......A.....
............
............
........A...
.........A..
............
............