Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package Y2024.D7
- class Calculations(lines: List<String>) {
- val calculations = mutableMapOf<Long, List<Long>>()
- init {
- lines.map { it.split(" ") }.map {
- val sum = it[0].replace(":", "").toLong()
- calculations[sum] = it.subList(1, it.size).map { it.toLong() }
- }
- }
- fun sumOfTrueSums(): Long {
- return calculations.entries.filter {
- checkSum(it.key, it.value[0], it.value.subList(1, it.value.size))
- }.sumOf { it.key }
- }
- private fun checkSum(sum: Long, running: Long, numbers: List<Long>): Boolean {
- if (sum < running) return false
- if (numbers.isEmpty()) return sum == running
- return checkSum(sum, running * numbers[0], numbers.subList(1, numbers.size))
- || checkSum(sum, running + numbers[0], numbers.subList(1, numbers.size))
- }
- fun sumOfTrueSumsThreeOps(): Long {
- return calculations.entries.filter {
- checkSumThreeOps(it.key, it.value[0], it.value.subList(1, it.value.size))
- }.sumOf { it.key }
- }
- private fun checkSumThreeOps(sum: Long, running: Long, numbers: List<Long>): Boolean {
- if (sum < running) return false
- if (numbers.isEmpty()) return sum == running
- return checkSumThreeOps(sum, running * numbers[0], numbers.subList(1, numbers.size))
- || checkSumThreeOps(sum, running + numbers[0], numbers.subList(1, numbers.size))
- || checkSumThreeOps(sum, "${running}${numbers[0]}".toLong(), numbers.subList(1, numbers.size))
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement