Revert "Day 11 (Make fast when hot)"

This reverts commit 7bd424d1f9.
This commit is contained in:
Christian
2024-12-15 12:42:06 +01:00
parent 558b9f33be
commit 51b49018e4

View File

@@ -11,26 +11,28 @@ object Day11 extends Solver(11):
val mod = Math.pow(10, numDigits / 2).toLong val mod = Math.pow(10, numDigits / 2).toLong
Some(n % mod, n / mod) Some(n % mod, n / mod)
private val memo = MuMap.empty[(Long, Int), Long] private def count(initial: Seq[Long], depth: Int): Long =
private def count(initial: Long, numBlinks: Int): Long = def step(stones: MuMap[Long, Long]): MuMap[Long, Long] =
def rec(stone: Long, blinks: Int): Long = val next = MuMap.empty[Long, Long].withDefaultValue(0L)
if blinks == 0 then return 1L for ((stone, count) <- stones) {
memo.getOrElseUpdate( if stone == 0 then next(1) += count
(stone, blinks), { else
if stone == 0 then rec(1L, blinks - 1) halves(stone) match
else case Some((a, b)) =>
halves(stone) match next(a) += count
case Some(a, b) => next(b) += count
rec(a, blinks - 1) + rec(b, blinks - 1) case None =>
case None => rec(stone * 2024, blinks - 1) next(stone * 2024) += count
} }
) next
rec(initial, numBlinks)
val initMap = MuMap.from(initial.map((_, 1L)))
Seq.iterate(initMap, depth + 1)(step).last.values.sum
def run(input: os.ReadablePath): (Timings, Solution) = def run(input: os.ReadablePath): (Timings, Solution) =
val (pre_time, in) = timed { longs(os.read.lines(input).head) } val (pre_time, in) = timed { longs(os.read.lines(input).head) }
val (p1_time, p1_solution) = timed { in.map(v => count(v, 25)).sum } val (p1_time, p1_solution) = timed { count(in, 25) }
val (p2_time, p2_solution) = timed { in.map(v => count(v, 75)).sum } val (p2_time, p2_solution) = timed { count(in, 75) }
( (
Timings(pre_time, p1_time, p2_time), Timings(pre_time, p1_time, p2_time),