46 lines
1 KiB
Scala
46 lines
1 KiB
Scala
package aoc
|
|
package day02
|
|
|
|
val dayNumber = "02"
|
|
|
|
@main def part1: Unit =
|
|
println(part1(loadInput(dayNumber)))
|
|
|
|
@main def part2: Unit =
|
|
println(part2(loadInput(dayNumber)))
|
|
|
|
def part1(input: String): String =
|
|
|
|
def isSafe(rs: Array[Int]): Boolean =
|
|
val rsInc = if rs.head > rs.last then rs.reverse else rs
|
|
rsInc
|
|
.sliding(2)
|
|
.map { case Array(a, b) => b - a }
|
|
.forall(diff => diff >= 1 && diff <= 3)
|
|
|
|
input
|
|
.split("\n")
|
|
.map(_.split(" ").map(_.toInt))
|
|
.count(isSafe)
|
|
.toString
|
|
|
|
def part2(input: String): String =
|
|
|
|
def isSafe(rs: Array[Int]): Boolean =
|
|
val rsInc = if rs.head > rs.last then rs.reverse else rs
|
|
rsInc
|
|
.sliding(2)
|
|
.map { case Array(a, b) => b - a }
|
|
.forall(diff => diff >= 1 && diff <= 3)
|
|
|
|
def isSafeWithTolerance(rs: Array[Int]): Boolean =
|
|
isSafe(rs) ||
|
|
(for i <- 0 to rs.length
|
|
yield isSafe(rs.take(i) ++ rs.drop(i + 1)))
|
|
.exists(identity)
|
|
|
|
input
|
|
.split("\n")
|
|
.map(_.split(" ").map(_.toInt))
|
|
.count(isSafeWithTolerance)
|
|
.toString
|