advent-of-code-2024/02-b.kts
2024-12-02 14:53:16 +08:00

49 lines
1.1 KiB
Kotlin

import java.util.Scanner
val isSafelyIncreasing = { offset: Int -> offset in 1..3 }
val isSafelyDecreasing = { offset: Int -> offset in (-3)..(-1) }
fun isSafeRoute(levels: List<Int>): Boolean {
val levelOffsets = levels.foldIndexed(ArrayList<Int>()) { index, acc, i ->
if (index > 0) {
acc.add(i - levels[index - 1])
}
acc
}
return (levelOffsets.all(isSafelyIncreasing) || levelOffsets.all(isSafelyDecreasing))
}
fun isSafeRouteTolerated(levels: List<Int>): Boolean {
if (isSafeRoute(levels)) {
return true
}
for (skipPos in levels.indices) {
val skippedList = levels.slice((0)..<skipPos) + levels.slice((skipPos+1)..levels.lastIndex)
if (isSafeRoute(skippedList)) {
return true
}
}
return false
}
val scanner = Scanner(System.`in`)
var safeCount = 0
while (scanner.hasNextInt()) {
val line = scanner.nextLine()
val numbers = line.split(" ").map { it.toInt() }
if (isSafeRouteTolerated(numbers)) {
safeCount++
}
}
println(safeCount)