Day 08
This commit is contained in:
parent
ab68e90706
commit
87c3869717
2 changed files with 110 additions and 0 deletions
50
input/day08
Normal file
50
input/day08
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
.............4....O..........w....R...............
|
||||||
|
.................................f................
|
||||||
|
..............4...j......NW0......................
|
||||||
|
....................R..W..........................
|
||||||
|
...............R..................................
|
||||||
|
..................................................
|
||||||
|
v.......................f.......0W................
|
||||||
|
.....9L............l...N.........w................
|
||||||
|
....L....9.......ON........8......................
|
||||||
|
.1.........49L........f..0..N.....................
|
||||||
|
..........................V...l...................
|
||||||
|
..........4.......................................
|
||||||
|
.....................j...................3.....U..
|
||||||
|
....O.....U.......................................
|
||||||
|
........J......................l..................
|
||||||
|
.O....s.Q.......j.....l.....w..........F...q......
|
||||||
|
..................................................
|
||||||
|
.U.......................j..8.....................
|
||||||
|
................U...............................3.
|
||||||
|
2.............................J............3......
|
||||||
|
..............................F...................
|
||||||
|
.....s...R...........J..................F.........
|
||||||
|
.s......................x..........F.....q........
|
||||||
|
.......2.....Q........3........x..................
|
||||||
|
...........v......................u...............
|
||||||
|
..............v...........n......8............q...
|
||||||
|
.......f..................8........i..............
|
||||||
|
.5..................1n..............P.....i.......
|
||||||
|
............7............Q..................X.....
|
||||||
|
......5...p....................V..................
|
||||||
|
.................J..........nx............q.......
|
||||||
|
.......p............W...........................0.
|
||||||
|
......2.............p.5.....1....P................
|
||||||
|
......I.................7.X....i...P..............
|
||||||
|
............s.....r...w................V..........
|
||||||
|
...............or...6.................V...........
|
||||||
|
............................PS.7..................
|
||||||
|
..........o...........................S...........
|
||||||
|
...........5..............o..1.......n............
|
||||||
|
...........I.........r.......7.......6............
|
||||||
|
.................o.r...........X..................
|
||||||
|
................................x.........u.......
|
||||||
|
.........p..Q....2................................
|
||||||
|
.........v.................S.....................u
|
||||||
|
I...........................S.....6...............
|
||||||
|
..................................................
|
||||||
|
.......I..........................................
|
||||||
|
..................................................
|
||||||
|
.......................................6..........
|
||||||
|
.................................X................
|
||||||
60
src/day08.scala
Normal file
60
src/day08.scala
Normal file
|
|
@ -0,0 +1,60 @@
|
||||||
|
package aoc
|
||||||
|
package day08
|
||||||
|
|
||||||
|
val dayNumber = "08"
|
||||||
|
|
||||||
|
@main def part1: Unit =
|
||||||
|
println(part1(loadInput(dayNumber)))
|
||||||
|
|
||||||
|
@main def part2: Unit =
|
||||||
|
println(part2(loadInput(dayNumber)))
|
||||||
|
|
||||||
|
def part1(input: String): String =
|
||||||
|
val (gridMap, antennas) = parseInput(input)
|
||||||
|
antennas.toList
|
||||||
|
.flatMap(positions =>
|
||||||
|
positions.combinations(2).flatMap { case List((ax, ay), (bx, by)) =>
|
||||||
|
val (diffX, diffY) = (bx - ax, by - ay)
|
||||||
|
List((ax - diffX, ay - diffY), (bx + diffX, by + diffY))
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.distinct
|
||||||
|
.count(gridMap.get(_).isDefined)
|
||||||
|
.toString
|
||||||
|
|
||||||
|
def part2(input: String): String =
|
||||||
|
val (gridMap, antennas) = parseInput(input)
|
||||||
|
antennas.toList
|
||||||
|
.flatMap(positions =>
|
||||||
|
positions.combinations(2).flatMap { case List((ax, ay), (bx, by)) =>
|
||||||
|
val (diffX, diffY) = (bx - ax, by - ay)
|
||||||
|
LazyList
|
||||||
|
.iterate(ax -> ay)((x, y) => (x - diffX, y - diffY))
|
||||||
|
.takeWhile(gridMap.get(_).isDefined) ++
|
||||||
|
LazyList
|
||||||
|
.iterate(bx -> by)((x, y) => (x + diffX, y + diffY))
|
||||||
|
.takeWhile(gridMap.get(_).isDefined) ++
|
||||||
|
List((ax, ay), (bx, by))
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.distinct
|
||||||
|
.length
|
||||||
|
.toString
|
||||||
|
|
||||||
|
def parseInput(
|
||||||
|
input: String
|
||||||
|
): (Map[(Int, Int), Char], List[List[(Int, Int)]]) =
|
||||||
|
val grid = input.split("\n")
|
||||||
|
val coords =
|
||||||
|
for
|
||||||
|
y <- 0 until grid.length
|
||||||
|
x <- 0 until grid.head.length
|
||||||
|
yield (x, y) -> grid(y)(x)
|
||||||
|
val gridMap = coords.toMap
|
||||||
|
val antennas = coords
|
||||||
|
.filter(_._2 != '.')
|
||||||
|
.groupMap(_._2)(_._1)
|
||||||
|
.values
|
||||||
|
.map(_.toList)
|
||||||
|
.toList
|
||||||
|
(gridMap, antennas)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue