Day 07
This commit is contained in:
parent
22c66a4757
commit
ab68e90706
2 changed files with 894 additions and 0 deletions
44
src/day07.scala
Normal file
44
src/day07.scala
Normal 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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue