advent-of-code-2024/05-a.kts

39 lines
992 B
Text
Raw Normal View History

2024-12-05 15:27:31 +08:00
import java.util.Scanner
val scanner = Scanner(System.`in`)
val rules = HashMap<Int, MutableSet<Int>>()
while (scanner.hasNextLine()) {
val line = scanner.nextLine()
if (line == "") {
break;
}
val (before, after) = line.split("|").map(String::toInt)
if (!rules.contains(before)) {
rules[before] = HashSet<Int>()
}
rules[before]!!.add(after)
}
var sum = 0
while (scanner.hasNextLine()) {
val line = scanner.nextLine()
val pages = line.split(",").map(String::toInt)
val result = pages.fold(Pair(HashSet<Int>(), true)) { (appeared, isSafe), page ->
val shouldBeAfter = rules[page]?.toSet() ?: emptySet()
val violateRule = appeared.intersect(shouldBeAfter)
val stillSafe = isSafe && violateRule.isEmpty()
appeared.add(page)
Pair(appeared, stillSafe)
}
if (result.second) {
val pagesArray = pages.toIntArray()
sum += pagesArray[pagesArray.size / 2]
}
}
println(sum)