57 lines
1.5 KiB
Kotlin
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] }
|
|
}
|
|
}
|