diff --git a/02-a.kts b/02-a.kts new file mode 100644 index 0000000..cabee17 --- /dev/null +++ b/02-a.kts @@ -0,0 +1,33 @@ +import java.util.Scanner + +val isSafelyIncreasing = { offset: Int -> offset in 1..3 } + +val isSafelyDecreasing = { offset: Int -> offset in (-3)..(-1) } + +fun isSafeRoute(levels: List): Boolean { + val levelOffsets = levels.foldIndexed(ArrayList()) { index, acc, i -> + if (index > 0) { + acc.add(i - levels[index - 1]) + } + acc + } + + return levelOffsets.all(isSafelyIncreasing) || levelOffsets.all(isSafelyDecreasing) +} + +val scanner = Scanner(System.`in`) + +var safeCount = 0 +while (scanner.hasNextInt()) { + val line = scanner.nextLine() + + val numbers = line.split(" ").map { it.toInt() } + + if (isSafeRoute(numbers)) { + safeCount++ + } +} + +println(safeCount) + + diff --git a/02-b.kts b/02-b.kts new file mode 100644 index 0000000..cc6b2dd --- /dev/null +++ b/02-b.kts @@ -0,0 +1,49 @@ +import java.util.Scanner + +val isSafelyIncreasing = { offset: Int -> offset in 1..3 } + +val isSafelyDecreasing = { offset: Int -> offset in (-3)..(-1) } + +fun isSafeRoute(levels: List): Boolean { + val levelOffsets = levels.foldIndexed(ArrayList()) { index, acc, i -> + if (index > 0) { + acc.add(i - levels[index - 1]) + } + acc + } + + return (levelOffsets.all(isSafelyIncreasing) || levelOffsets.all(isSafelyDecreasing)) + +} + +fun isSafeRouteTolerated(levels: List): Boolean { + if (isSafeRoute(levels)) { + return true + } + + for (skipPos in levels.indices) { + val skippedList = levels.slice((0)..