Fix weird indent
All checks were successful
Solve / example-action (push) Successful in 3m8s

This commit is contained in:
Logiar 2024-12-12 15:36:47 +01:00
parent f16258eae7
commit 0f2b85f2ad
Signed by: Logiar
SSH Key Fingerprint: SHA256:tq77C31em1ZG4oELIHC3k62wq5UzPSXmhqH8g62whIY

112
day10.kts
View File

@ -2,72 +2,72 @@
import java.util.Scanner
class TrailHead(private val x: Int, private val y: Int, private val map: Map) {
private val peaks = mutableMapOf<Pair<Int, Int>, Int>()
fun getScore(): Int {
if (this.peaks.isEmpty()) {
for (peak in this.walkToPeak(this.x, this.y)) {
this.peaks[peak] = (this.peaks[peak] ?: 0) + 1
}
}
return this.peaks.keys.size
}
fun getGetRating(): Int {
this.getScore()
return this.peaks.values.sum()
}
private fun walkToPeak(x: Int, y: Int, previous: Int = -1): List<Pair<Int, Int>> {
if (x < 0 || x >= map.getLength() || y < 0 || y >= map.getHeight() || map.get(x, y) != (previous + 1)) {
return listOf()
} else if (map.get(x, y) == 9) {
return listOf(Pair(x, y))
} else {
val current = map.get(x, y)
return walkToPeak(x + 1, y, current) + walkToPeak(x - 1, y, current) + walkToPeak(x, y + 1, current) + walkToPeak(x, y - 1, current)
class TrailHead(private val x: Int, private val y: Int, private val map: Map) {
private val peaks = mutableMapOf<Pair<Int, Int>, Int>()
fun getScore(): Int {
if (this.peaks.isEmpty()) {
for (peak in this.walkToPeak(this.x, this.y)) {
this.peaks[peak] = (this.peaks[peak] ?: 0) + 1
}
}
return this.peaks.keys.size
}
fun getGetRating(): Int {
this.getScore()
return this.peaks.values.sum()
}
class Map(private val grid: List<List<Int>>) {
private val trailHeads = mutableListOf<TrailHead>()
private fun walkToPeak(x: Int, y: Int, previous: Int = -1): List<Pair<Int, Int>> {
if (x < 0 || x >= map.getLength() || y < 0 || y >= map.getHeight() || map.get(x, y) != (previous + 1)) {
return listOf()
} else if (map.get(x, y) == 9) {
return listOf(Pair(x, y))
} else {
val current = map.get(x, y)
return walkToPeak(x + 1, y, current) + walkToPeak(x - 1, y, current) + walkToPeak(x, y + 1, current) + walkToPeak(x, y - 1, current)
}
}
init {
grid.forEachIndexed { y, row ->
row.forEachIndexed { x, height ->
if (height == 0) {
trailHeads.add(TrailHead(x, y, this))
}
}
class Map(private val grid: List<List<Int>>) {
private val trailHeads = mutableListOf<TrailHead>()
init {
grid.forEachIndexed { y, row ->
row.forEachIndexed { x, height ->
if (height == 0) {
trailHeads.add(TrailHead(x, y, this))
}
}
}
fun addTrailHead(trailHead: TrailHead) {
trailHeads.add(trailHead)
}
fun get(x: Int, y: Int): Int {
return grid[y][x]
}
fun getHeight(): Int {
return grid.size
}
fun getLength(): Int {
return if (grid.isNotEmpty()) grid[0].size else 0
}
fun getScore(): Int {
return trailHeads.fold(0) { acc, trailHead -> acc + trailHead.getScore() }
}
fun getGetRating(): Int {
return trailHeads.fold(0) { acc, trailHead -> acc + trailHead.getGetRating() }
}
}
fun addTrailHead(trailHead: TrailHead) {
trailHeads.add(trailHead)
}
fun get(x: Int, y: Int): Int {
return grid[y][x]
}
fun getHeight(): Int {
return grid.size
}
fun getLength(): Int {
return if (grid.isNotEmpty()) grid[0].size else 0
}
fun getScore(): Int {
return trailHeads.fold(0) { acc, trailHead -> acc + trailHead.getScore() }
}
fun getGetRating(): Int {
return trailHeads.fold(0) { acc, trailHead -> acc + trailHead.getGetRating() }
}
}
val scanner = Scanner(System.`in`)
val mapInput = mutableListOf<List<Int>>()