1
0
Files
Advent-of-Code/days/src/main/kotlin/Day09.kt
T
2020-12-09 10:37:24 +01:00

57 lines
1.5 KiB
Kotlin

package be.vandewalleh.aoc.days
import be.vandewalleh.aoc.utils.input.Day
import be.vandewalleh.aoc.utils.input.Input
import be.vandewalleh.aoc.utils.input.Lines
import be.vandewalleh.aoc.utils.input.createDay
@Day(9)
class Day09(@Lines val input: Input<LongArray>) {
private var part1Result = 0L
fun part1(): Long? {
val longs = input.value
for (windowStart in 0 until longs.size - 26) {
val last = longs[windowStart + 25]
if (!isValid(windowStart, last)) {
part1Result = last
return last
}
}
return null
}
private fun isValid(windowStart: Int, last: Long): Boolean {
for (i in windowStart until windowStart + 25) {
for (j in windowStart + 1 until windowStart + 25) {
val f = input.value[i]
val s = input.value[j]
if (f + s == last && f != s) return true
}
}
return false
}
fun part2(): Long {
var size = 2
while (true) {
for (startIndex in input.value.indices) {
val lastIndex = input.value.size - 1 - size
if (startIndex + size > lastIndex) break
val slice = input.value.sliceArray(startIndex..startIndex + size)
if (slice.sum() == part1Result) return slice.minOrNull()!! + slice.maxOrNull()!!
}
size++
}
}
}
fun main() = with(createDay<Day09>()) {
println(part1())
println(part2())
}