complete day 7

This commit is contained in:
WanCW 2024-12-09 11:38:41 +08:00
parent 64dadfa0da
commit 7891c409bb
Signed by: wancw
GPG key ID: 1A22F8C8D1877952
2 changed files with 62 additions and 0 deletions

30
07-a.kts Normal file
View file

@ -0,0 +1,30 @@
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)
}

32
07-b.kts Normal file
View file

@ -0,0 +1,32 @@
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(line)
}
}
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$head".toBigInteger())
r.add(p.plus(head))
r.add(p.times(head))
r
}
return findAllPossibleResult(newResults, tail)
}