Day 02
This commit is contained in:
1000
data/02.in
Normal file
1000
data/02.in
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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 =
|
||||||
|
|||||||
35
src/main/scala/days/Day02.scala
Normal file
35
src/main/scala/days/Day02.scala
Normal 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))
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user