This commit is contained in:
Paul-Henri Froidmont 2024-12-07 16:57:05 +01:00
parent 22c66a4757
commit ab68e90706
Signed by: phfroidmont
GPG key ID: BE948AFD7E7873BE
2 changed files with 894 additions and 0 deletions

44
src/day07.scala Normal file
View file

@ -0,0 +1,44 @@
package aoc
package day07
val dayNumber = "07"
@main def part1: Unit =
println(part1(loadInput(dayNumber)))
@main def part2: Unit =
println(part2(loadInput(dayNumber)))
def part1(input: String): String =
val ops: List[(Long, Long) => Long] = List(_ * _, _ + _)
parseInput(input)
.collect { case (res, nums) if isSolvable(res, nums, ops) => res }
.sum
.toString
def part2(input: String): String =
val ops: List[(Long, Long) => Long] =
List(_ * _, _ + _, (a, b) => s"$a$b".toLong)
parseInput(input)
.collect { case (res, nums) if isSolvable(res, nums, ops) => res }
.sum
.toString
def parseInput(input: String) =
input
.split("\n")
.toList
.map { case s"$res: $nums" =>
(res.toLong, nums.split(" ").map(_.toLong).toList)
}
def isSolvable(
res: Long,
nums: List[Long],
ops: List[(Long, Long) => Long]
): Boolean =
nums.tail
.foldLeft(List(nums.head))((acc, num) =>
acc.flatMap(total => ops.map(_(total, num)))
)
.contains(res)