Advertisement
Guest User

AOC - 2024 day 7

a guest
Dec 7th, 2024
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.56 KB | Source Code | 0 0
  1. package Y2024.D7
  2.  
  3. class Calculations(lines: List<String>) {
  4.     val calculations = mutableMapOf<Long, List<Long>>()
  5.  
  6.     init {
  7.         lines.map { it.split(" ") }.map {
  8.             val sum = it[0].replace(":", "").toLong()
  9.             calculations[sum] = it.subList(1, it.size).map { it.toLong() }
  10.         }
  11.     }
  12.  
  13.     fun sumOfTrueSums(): Long {
  14.         return calculations.entries.filter {
  15.             checkSum(it.key, it.value[0], it.value.subList(1, it.value.size))
  16.         }.sumOf { it.key }
  17.     }
  18.  
  19.     private fun checkSum(sum: Long, running: Long, numbers: List<Long>): Boolean {
  20.         if (sum < running) return false
  21.         if (numbers.isEmpty()) return sum == running
  22.         return checkSum(sum, running * numbers[0], numbers.subList(1, numbers.size))
  23.                 || checkSum(sum, running + numbers[0], numbers.subList(1, numbers.size))
  24.     }
  25.  
  26.     fun sumOfTrueSumsThreeOps(): Long {
  27.         return calculations.entries.filter {
  28.             checkSumThreeOps(it.key, it.value[0], it.value.subList(1, it.value.size))
  29.         }.sumOf { it.key }
  30.     }
  31.  
  32.     private fun checkSumThreeOps(sum: Long, running: Long, numbers: List<Long>): Boolean {
  33.         if (sum < running) return false
  34.         if (numbers.isEmpty()) return sum == running
  35.         return checkSumThreeOps(sum, running * numbers[0], numbers.subList(1, numbers.size))
  36.                 || checkSumThreeOps(sum, running + numbers[0], numbers.subList(1, numbers.size))
  37.                 || checkSumThreeOps(sum,  "${running}${numbers[0]}".toLong(), numbers.subList(1, numbers.size))
  38.     }
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement