This commit is contained in:
Christian
2024-12-02 06:31:17 +01:00
parent 5c5ebfc3b5
commit cfd2c5cc45
3 changed files with 1037 additions and 1 deletions

1000
data/02.in Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,8 @@ package dev.ctsk.aoc
import dev.ctsk.aoc.days._ import dev.ctsk.aoc.days._
val solvers = Map[Int, Solver]( val solvers = Map[Int, Solver](
1 -> Day01 1 -> Day01,
2 -> Day02
) )
@main def main(day: String, input: String): Unit = @main def main(day: String, input: String): Unit =

View File

@@ -0,0 +1,35 @@
package dev.ctsk.aoc.days
import dev.ctsk.aoc._
object Day02 extends Solver(2):
def pre(input: String): List[List[Int]] =
io.Source
.fromFile(input)
.getLines()
.map(line => line.split(" ").map(_.toInt).toList)
.toList
def valid(list: List[Int]): Boolean =
val isSorted = (list.sorted == list || list.sorted.reverse == list)
val notTooLarge = list.sliding(2).map(x => (x(1) - x(0)).abs).forall(_ <= 3)
val notTooSmall = list.sliding(2).map(x => (x(1) - x(0)).abs).forall(_ >= 1)
isSorted && notTooLarge && notTooSmall
def part1(lists: List[List[Int]]): Int = lists.count(valid)
def part2(lists: List[List[Int]]): Int =
lists.count(list =>
list.indices.exists(i => valid(list.take(i) ++ list.drop(i + 1)))
)
def run(input: String): (Timings, Solution) =
val (pre_time, pre_input) = timed { pre(input) }
val (p1_time, p1_solution) = timed { part1(pre_input) }
val (p2_time, p2_solution) = timed { part2(pre_input) }
(
Timings(pre_time, p1_time, p2_time),
Solution(Int.box(p1_solution), Int.box(p2_solution))
)