advent-of-code-2024/07-a.kts
2024-12-09 11:38:41 +08:00

30 lines
No EOL
940 B
Kotlin

import java.math.BigInteger
import java.util.*
val scanner = Scanner(System.`in`)
var sum: BigInteger = BigInteger.ZERO
while (scanner.hasNextLine()) {
val line = scanner.nextLine()
val numbersInLine = line.split("[: ]+".toRegex()).map(String::toBigInteger)
val target = numbersInLine.first()
val numbers = numbersInLine.drop(1)
val possibleResults = findAllPossibleResult(setOf(numbers.first()), numbers.drop(1))
if (possibleResults.contains(target)) {
sum += target
}
}
println(sum)
fun findAllPossibleResult(partialResults: Set<BigInteger>, numbers: List<BigInteger>): Set<BigInteger> {
if (numbers.isEmpty()) return partialResults
val head = numbers.first()
val tail = numbers.drop(1)
val newResults = partialResults.fold(HashSet<BigInteger>()) { r, p ->
r.add(p.plus(head))
r.add(p.times(head))
r
}
return findAllPossibleResult(newResults, tail)
}