Day 8 part 1

This commit is contained in:
Sven Weidauer 2024-12-08 19:33:27 +01:00
parent dc54e2d776
commit 7ace3b8119
2 changed files with 92 additions and 0 deletions

View file

@ -0,0 +1,42 @@
fun main() {
val grid = Grid.read("day8.txt")
val antennasByFrequency = mutableMapOf<Char, MutableList<Grid.Coordinate>>()
for (y in 0..<grid.height) {
for (x in 0..<grid.width) {
val value = grid.get(x, y)
if (value != '.') {
antennasByFrequency.getOrPut(value) { mutableListOf() }.add(Grid.Coordinate(x, y))
}
}
}
fun isAntinode(coordinate: Grid.Coordinate, frequency: Char, antennas: List<Grid.Coordinate>) =
antennas.any { antenna ->
val dx = antenna.x - coordinate.x
val dy = antenna.y - coordinate.y
val secondAntenna = Grid.Coordinate(antenna.x + dx, antenna.y + dy)
secondAntenna != antenna && grid.inside(secondAntenna) && grid.get(secondAntenna) == frequency
}
fun isAntinode(coordinate: Grid.Coordinate) =
antennasByFrequency.any { (frequency, positions) ->
isAntinode(coordinate, frequency, positions)
}
val antinodes = mutableSetOf<Grid.Coordinate>()
for (y in 0..<grid.height) {
for (x in 0..<grid.width) {
val coordinate = Grid.Coordinate(x, y)
if (isAntinode(coordinate)) {
antinodes.add(coordinate)
}
}
}
println("Part 1: ${antinodes.count()}")
}