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()

 

 

 

 

留言

這個網誌中的熱門文章

Unresolved reference: BuildConfig

Day 2 using Kotlin - Advent of Code 2025