Skip to content

Commit a5c6c7e

Browse files
committed
Solution Day 21, part two (Keypad Conundrum)
1 parent 70b7f27 commit a5c6c7e

File tree

2 files changed

+16
-28
lines changed

2 files changed

+16
-28
lines changed

src/main/kotlin/de/ronny_h/aoc/year24/day21/KeypadConundrum.kt

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,35 @@ import de.ronny_h.aoc.extensions.SimpleCharGrid
77
import de.ronny_h.aoc.extensions.asList
88
import de.ronny_h.aoc.extensions.memoize
99

10-
fun main() = KeypadConundrum().run(94426, 0)
10+
fun main() = KeypadConundrum().run(94426, 118392478819140)
1111

12-
class KeypadConundrum : AdventOfCode<Int>(2024, 21) {
13-
fun input(code: String, keypad: Keypad, depth: Int): String {
12+
class KeypadConundrum : AdventOfCode<Long>(2024, 21) {
13+
fun input(code: String, keypad: Keypad, depth: Int): Long {
1414
data class Parameters(val code: String, val depth: Int)
1515

16-
val keypads = buildList(depth) {
17-
repeat(depth) { add(Keypad(directionalKeypadLayout)) }
18-
} + keypad
19-
lateinit var inputRec: (Parameters) -> String
16+
val keypads = List(depth) { Keypad(directionalKeypadLayout) } + keypad
17+
lateinit var inputRec: (Parameters) -> Long
2018

2119
inputRec = { p: Parameters ->
2220
if (p.depth == 0) {
23-
p.code
21+
p.code.length.toLong()
2422
} else {
2523
p.code.map { char ->
26-
keypads[p.depth].moveTo(char).map {
24+
keypads[p.depth].moveTo(char).minOf {
2725
inputRec(Parameters(it, p.depth - 1))
28-
}.minBy { it.length }
29-
}.joinToString("")
26+
}
27+
}.sum()
3028
}
3129
}.memoize()
3230

3331
return inputRec(Parameters(code, depth))
3432
}
3533

36-
override fun part1(input: List<String>): Int = input.sumOf {
37-
input(it, Keypad(numericKeypadLayout), 3).length * it.dropLast(1).toInt()
38-
}
34+
override fun part1(input: List<String>): Long = sumOfComplexities(input, 3)
35+
override fun part2(input: List<String>): Long = sumOfComplexities(input, 26)
3936

40-
override fun part2(input: List<String>): Int = input.sumOf {
41-
input(it, Keypad(numericKeypadLayout), 26).length * it.dropLast(1).toInt()
37+
private fun sumOfComplexities(input: List<String>, depth: Int): Long = input.sumOf { code ->
38+
input(code, Keypad(numericKeypadLayout), depth) * code.dropLast(1).toLong()
4239
}
4340
}
4441

src/test/kotlin/de/ronny_h/aoc/year24/day21/KeypadConundrumTest.kt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package de.ronny_h.aoc.year24.day21
22

33
import de.ronny_h.aoc.extensions.asList
44
import io.kotest.core.spec.style.StringSpec
5-
import io.kotest.matchers.collections.shouldBeIn
65
import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder
76
import io.kotest.matchers.shouldBe
87

@@ -32,23 +31,15 @@ class KeypadConundrumTest : StringSpec({
3231
}
3332

3433
"input v<<A>>^A, last robot" {
35-
KeypadConundrum().input("v<<A>>^A", Keypad(directionalKeypadLayout), 1) shouldBeIn
36-
listOf(
37-
"<vA<AA>>^AvAA<^A>A",
38-
"v<A<AA>^>AvAA^<A>A",
39-
)
34+
KeypadConundrum().input("v<<A>>^A", Keypad(directionalKeypadLayout), 1) shouldBe 18L
4035
}
4136

4237
"input 0, all robots" {
43-
KeypadConundrum().input("0", Keypad(numericKeypadLayout), 3) shouldBeIn
44-
listOf(
45-
"<vA<AA>>^AvAA<^A>A",
46-
"v<A<AA>^>AvAA^<A>A",
47-
)
38+
KeypadConundrum().input("0", Keypad(numericKeypadLayout), 3) shouldBe 18L
4839
}
4940

5041
"input with depth 1" {
51-
KeypadConundrum().input("v", Keypad(directionalKeypadLayout), 1) shouldBe "v<A"
42+
KeypadConundrum().input("v", Keypad(directionalKeypadLayout), 1) shouldBe 3
5243
}
5344

5445
"part 1: The sum of the complexities of the five codes" {

0 commit comments

Comments
 (0)