Day 1 using Kotlin - Advent of Code 2025

https://adventofcode.com/2025/day/1

1. 密碼鎖 環形 0~99

2. 往右轉數字變大,往左轉數字減小。

3. 當 99 往右轉 1,會到 0。當 0 往左轉,會到 99。

4. 密碼為每次轉動後停在 0 的次數。

 

SA、SD:

1. 當下位置會隨著每次轉動而更新。故宣告為 var。

2. R 為正,;L 為負:用此決定數字變大或變小(正負號)。

3. 當轉動時,會有機會超過 99 或 0,故以餘數來求得轉動後的指針位置。

4. 但當餘數小於 0 時,得將指針位置對應到其實際所代表的數字。

5. 應要求得每次轉動後停在 0 的次數,以 currPos == 0 來判斷,並搭配使用 count。 

 

val totalClicks = 100

var currPos = 50

readInput( "Day01" ).count { line ->
currPos += ( if ( line.first() == 'R' ) 1 else -1 ) *
line.substring( 1 ).toInt()

currPos %= totalClicks

if ( currPos < 0 ) {
currPos += totalClicks
}

currPos == 0
}.println()

 

--- Part 2 ---

1. 只要經過刻度 0,都算一次。

2. 密碼為 經過或停在刻度 0 的總次數。

 

SA、SD:

1. 先前位置 + 轉動距離 = 帶有正負號的新位置。

2. 當新位置為負時,表示有經過 0;次數加 1。 

3. 當新位置為 0 時,次數加 1。

4. 把每次轉動經過或停在 0 的次數加總,使用 sumOf。 

 

var prevPos = 50

readInput("Day01").sumOf { line ->
currPos = prevPos + (if (line.first() == 'R') 1 else -1) *
line.substring(1).toInt()

(( if ( prevPos * currPos < 0 ) 1 else 0 ) + ( if ( currPos == 0 ) 1
else 0 ) + currPos.absoluteValue / totalClicks ).also {
prevPos = currPos % totalClicks

if ( prevPos < 0 ) {
prevPos += totalClicks
}
}
}.println()

 


留言

這個網誌中的熱門文章

Unresolved reference: BuildConfig

Day 3 using Kotlin - Advent of Code 2025

Day 2 using Kotlin - Advent of Code 2025