Day 3 using Kotlin - Advent of Code 2025
https://adventofcode.com/2025/day/3
var max: Char
var maxIndex: Int
var startSub: String
var trailSub: String
var startMax: String
var trailMax: String
readInput( "Day03" ).sumOf { line ->
max = line.max()
maxIndex = line.indexOf( max )
startSub = line.take( maxIndex )
trailSub = line.substring( maxIndex + 1 )
startMax = if ( startSub.isEmpty()) max.toString() else
startSub.max().toString() + max
trailMax = if ( trailSub.isEmpty()) max.toString() else
max.toString() + trailSub.max()
startMax.toInt().coerceAtLeast( trailMax.toInt())
}.println()
--- Part 2 ---
val digitCount = 12
var indexCharPairList: MutableList<Pair<Int, Char>>
readInput( "Day03" ).sumOf { line ->
var remainCount = digitCount
indexCharPairList = mutableListOf()
fun findMax( subLine: String, startIndex: Int ) {
max = subLine.max()
maxIndex = subLine.indexOf( max )
indexCharPairList.add( Pair( maxIndex + startIndex, max ))
remainCount--
if ( remainCount > 0 ) {
startSub = subLine.take( maxIndex )
if ( maxIndex < subLine.lastIndex ) {
val trailIndex = maxIndex + 1
trailSub = subLine.substring( trailIndex )
if ( trailSub.length <= remainCount ) {
indexCharPairList.addAll(
trailSub.mapIndexed { index, char ->
index + trailIndex + startIndex to char
} // mapIndexed
) // addAll
remainCount -= trailSub.length
if ( remainCount > 0 ) {
findMax( startSub, startIndex )
} // if
} else {
findMax( trailSub, trailIndex + startIndex )
} // if - else
} else {
findMax( startSub, startIndex )
} // if - else
} // if
} // fun findMax( String, Int )
findMax( line, 0 )
indexCharPairList.sortedWith { one, other ->
one.first - other.first
}.map { pair ->
pair.second
}.joinToString( "" ).toLong()
}.println()
留言
張貼留言