1
0
2021-12-10 20:00:31 +01:00

57 lines
1.5 KiB
Kotlin

package be.vandewalleh.aoc.days
import be.vandewalleh.aoc.utils.BaseDay
import be.vandewalleh.aoc.utils.input.Day
@Day
class Day10 : BaseDay() {
private val chunks = mapOf(
')' to '(',
']' to '[',
'>' to '<',
'}' to '{',
)
override fun part1(): Any {
val points = mapOf(
')' to 3,
']' to 57,
'}' to 1197,
'>' to 25137,
)
return input.lines.value.sumOf { line ->
val stack = mutableListOf<Char>()
for (char in line) {
if (char in chunks) {
if (stack.last() == chunks[char]!!) stack.removeLast()
else return@sumOf points[char]!!
} else {
stack.add(char)
}
}
0
}
}
override fun part2(): Any {
val points = mapOf(
'(' to 1,
'[' to 2,
'{' to 3,
'<' to 4,
)
return input.lines.value.mapNotNull { line ->
val stack = mutableListOf<Char>()
for (char in line) {
if (char in chunks) {
if (stack.last() == chunks[char]!!) stack.removeLast()
else return@mapNotNull null
} else {
stack.add(char)
}
}
stack.asReversed().fold(0L) { score, char -> score * 5 + points[char]!! }
}.sorted().let { it[it.size / 2] }
}
}