This commit is contained in:
Paul-Henri Froidmont 2024-12-11 13:55:13 +01:00
parent e6604dbb24
commit 065e0178ae
Signed by: phfroidmont
GPG key ID: BE948AFD7E7873BE
2 changed files with 48 additions and 0 deletions

1
input/day11 Normal file
View file

@ -0,0 +1 @@
8069 87014 98 809367 525 0 9494914 5

47
src/day11.scala Normal file
View file

@ -0,0 +1,47 @@
package aoc
package day11
import scala.collection.{mutable as m}
val dayNumber = "11"
@main def part1: Unit =
println(part1(loadInput(dayNumber)))
@main def part2: Unit =
println(part2(loadInput(dayNumber)))
def part1(input: String): String =
val stones = parseInput(input)
blink(stones, 25)
stones.values.sum.toString
def part2(input: String): String =
val stones = parseInput(input)
blink(stones, 75)
stones.values.sum.toString
def parseInput(input: String) =
input
.split(" ")
.map(_.toLong)
.groupBy(identity)
.view
.mapValues(_.length.toLong)
.to(m.Map)
def changeStone(n: Long): List[Long] =
n.toString match
case "0" => List(1)
case s if s.length % 2 == 0 =>
s.splitAt(s.length / 2).toList.map(_.toLong)
case s => List(n * 2024)
def blink(stones: m.Map[Long, Long], times: Int): Unit =
for (_ <- 1 to times) do
val changes = stones.toList.flatMap((number, count) =>
List((number, -count)) ++ changeStone(number).map((_, count))
)
changes.foreach((number, change) =>
stones.updateWith(number)(_.map(_ + change).orElse(Some(change)))
)