Day 2 using Kotlin - Advent of Code 2025
https://adventofcode.com/2025/day/2
1. 找出不合法的產品識別碼並加總。
2. 不合法的識別碼為連續的數字出現兩次。例:55(5 出現兩次),6464(64 出現兩次)等。
SA、SD:
1. 產品識別碼偶數位數的要判斷,奇數的不用。
val start = 0
val end = 1
var strId: String
var halfLength: Int
// 1. 檔案只有一行
// 2. 每個範圍以逗號分隔
// 3. 結果為加總,故使用 sumOf
readInput( "Day02" ).first().split( "," ).sumOf { rangeStr ->
// 如果長度不相等,要找出其中不合法的識別碼:95-115
// 如果長度相等,而長度為偶數,也要進行判斷:11-22
rangeStr.split( "-" ).takeIf { strList ->
strList[ start ].length != strList[ end ].length ||
strList[ start ].length % 2 == 0
}?.let { startEnd ->
startEnd[ start ].toLong().rangeTo( startEnd[ end ].toLong()
).filter { longId ->
strId = longId.toString()
halfLength = strId.length / 2
strId.length % 2 == 0 && strId.take( halfLength ) ==
strId.substring( halfLength )
}.sum()
} ?: 0
}.println()
--- Part 2 ---
1. 只要連續重複出現
var startEnd: List<String>
readInput( "Day02" ).first().split( "," ).sumOf { rangeStr ->
startEnd = rangeStr.split( "-" )
startEnd[ start ].toLong().rangeTo( startEnd[ end ].toLong()
).filter { longId ->
strId = longId.toString()
1.rangeTo( strId.length / 2 ).any { subLength ->
strId.take( subLength )
.repeat( strId.length / subLength ) == strId
} // any
}.sum()
}.println()
留言
張貼留言