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