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() 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() 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] } } }