Skip to content

Commit cdcdca2

Browse files
committed
Day 10
1 parent 59d3b81 commit cdcdca2

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

src/main/kotlin/y24/Day10.kt

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package y24
2+
3+
import common.puzzle.solvePuzzle
4+
import common.puzzle.Input
5+
import common.puzzle.Puzzle
6+
import common.datastructures.*
7+
import common.ext.*
8+
import common.util.*
9+
import java.util.*
10+
import kotlin.math.*
11+
import kotlin.system.exitProcess
12+
13+
14+
fun main() = solvePuzzle(year = 2024, day = 10) { Day10(it) }
15+
16+
class Day10(val input: Input) : Puzzle {
17+
18+
private fun trails(grid: Grid<Int>, p: Cell<Int>): List<Point> {
19+
if (p.value == 9) {
20+
return listOf(p.toPoint())
21+
}
22+
23+
return grid.neighbors(p)
24+
.filter { it.value == p.value + 1 }
25+
.flatMap { trails(grid, it) }
26+
}
27+
28+
private val grid = Grid(input.lines.size, input.lines[0].length) { row, col -> input.lines[row][col].digitToInt() }
29+
private val trailHeads = grid.cells().filter { it.value == 0 }
30+
31+
override fun solveLevel1(): Any {
32+
return trailHeads.sumOf { trails(grid, it).distinct().size }
33+
}
34+
35+
override fun solveLevel2(): Any {
36+
return trailHeads.sumOf { trails(grid, it).size }
37+
}
38+
}

src/test/kotlin/y24/Day10Test.kt

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package y24
2+
3+
import common.puzzle.Input
4+
import org.junit.jupiter.api.Assertions.assertEquals
5+
import org.junit.jupiter.api.Test
6+
7+
internal class Day10Test {
8+
private val sample = Input("""
9+
89010123
10+
78121874
11+
87430965
12+
96549874
13+
45678903
14+
32019012
15+
01329801
16+
10456732
17+
""".trimIndent())
18+
19+
private val day = Day10(sample)
20+
21+
@Test
22+
fun solveLevel1() {
23+
assertEquals(36, day.solveLevel1())
24+
}
25+
26+
@Test
27+
fun solveLevel2() {
28+
assertEquals(81, day.solveLevel2())
29+
}
30+
}

0 commit comments

Comments
 (0)