diff --git a/src/main/kotlin/no/rodland/advent_2024/Day05.kt b/src/main/kotlin/no/rodland/advent_2024/Day05.kt index 0cddb534..9d2201d5 100644 --- a/src/main/kotlin/no/rodland/advent_2024/Day05.kt +++ b/src/main/kotlin/no/rodland/advent_2024/Day05.kt @@ -5,20 +5,34 @@ import no.rodland.advent.Day // template generated: 05/12/2024 // Fredrik Rødland 2024 -class Day05(val input: List) : Day>, List>>> { +class Day05(val input: List) : Day>, List>>> { private val parsed = input.parse() private val rules = parsed.first private val pages = parsed.second - override fun partOne(): Long { - return 2 + override fun partOne(): Int { + return pages + .filter { list -> + val pairs = list.pairs() + pairs.all { it in rules } + } + .sumOf { it.middle() } } override fun partTwo(): Long { return 2 } + private fun List.middle(): Int = get(size / 2) + + private fun List.pairs(): List> { + return flatMapIndexed { index: Int, i: Int -> + subList(index + 1, size).map { i to it } + } + } + + override fun List.parse(): Pair>, List>> { val (rulesStr, pagesStr) = this.joinToString("\n").split("\n\n").map { it.split("\n") } @@ -26,11 +40,12 @@ class Day05(val input: List) : Day> line.split(",").map { it.toInt() } } val rules = rulesStr.map { line -> - val (first, second) = line.split("|").map { it.toInt() } - first to second + line.split("|").map { it.toInt() }.let { it[0] to it[1] } } return rules to pages } override val day = "05".toInt() } + + diff --git a/src/test/kotlin/no/rodland/advent_2024/Day05Test.kt b/src/test/kotlin/no/rodland/advent_2024/Day05Test.kt index 7aeacb9b..56ce3e36 100644 --- a/src/test/kotlin/no/rodland/advent_2024/Day05Test.kt +++ b/src/test/kotlin/no/rodland/advent_2024/Day05Test.kt @@ -15,9 +15,9 @@ internal class Day05Test { private val data05 = "2024/input_05.txt".readFile() private val test05 = "2024/input_05_test.txt".readFile() - private val resultTestOne = 2L + private val resultTestOne = 143 private val resultTestTwo = 2L - private val resultOne = 2L + private val resultOne = 5762 private val resultTwo = 2L val test = defaultTestSuiteParseOnInit( @@ -29,6 +29,8 @@ internal class Day05Test { resultTwo, { Day05(data05) }, { Day05(test05) }, + numTestPart1 = 10, + numTestPart2 = 10, ) @Nested