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)