day(02): solve
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
parent
273204ca6b
commit
7341109f4d
2 changed files with 40 additions and 0 deletions
6
inputs/day02/sample.txt
Normal file
6
inputs/day02/sample.txt
Normal file
|
@ -0,0 +1,6 @@
|
|||
7 6 4 2 1
|
||||
1 2 7 8 9
|
||||
9 7 6 2 1
|
||||
1 3 2 4 5
|
||||
8 6 4 4 1
|
||||
1 3 6 7 9
|
34
src/Day02.kt
Normal file
34
src/Day02.kt
Normal file
|
@ -0,0 +1,34 @@
|
|||
class Day02(
|
||||
inputType: String,
|
||||
) : Day<Int, Int>() {
|
||||
private val reports: List<List<Int>> =
|
||||
readInput(2, inputType)
|
||||
.map { line ->
|
||||
line.split(" ").map { it.toInt() }
|
||||
}.toList()
|
||||
|
||||
override fun precompute() {
|
||||
// [TODO] Implement precomputation
|
||||
}
|
||||
|
||||
private fun isCorrect(report: List<Int>): Boolean {
|
||||
val isIncreasing = report[0] < report[1]
|
||||
return report.windowed(2).fold(true) { acc, (x, y) ->
|
||||
acc && maxOf(x - y, y - x) in 1..3 && ((isIncreasing && x < y) || (!isIncreasing && x > y))
|
||||
}
|
||||
}
|
||||
|
||||
override fun part1(): Int = reports.count(::isCorrect)
|
||||
|
||||
override fun part2(): Int =
|
||||
reports.count { report ->
|
||||
report.indices.any { skip ->
|
||||
isCorrect(report.filterIndexed { idx, _ -> idx != skip })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun main() {
|
||||
Day02("sample").test(2, 4)
|
||||
Day02("input").run()
|
||||
}
|
Loading…
Reference in a new issue