diff --git a/src/main/resources/eu/sim642/mits2024/day1.txt b/src/main/resources/eu/sim642/mits2024/day1.txt new file mode 100644 index 00000000..698ad36f --- /dev/null +++ b/src/main/resources/eu/sim642/mits2024/day1.txt @@ -0,0 +1,4 @@ +Kelluke: 1.67 +ForMe: 1.93 +Dynamit: 0.97 +mfKaDynamituForMeForMedeuDDdFyyeiyoeFKyDmfKDynamitForMeKKellukepForMeuupFFamDynamitDynamitumuayForMetKellukeDKellukeoKellukemKellukeuDfyeForMeeFaKellukeDprpKellukeaMyyKitpytFdeMKyKmDynamitFatKellukeuForMemDynamitDynamitriDynamitdaMMDynamitotDynamitKioydrdeirfpDynamitrFuyuKmrdKellukeKelluketKoFoFForMedyKaaeriKellukeotMymDynamitKellukefodpDuFDyFtrdDMurpForMeDynamittDynamitDynamitepKaForMeimaDynamitdaopKForMeuDynamitfdopueoDynamitForMeuiDynamityiyDmfForMeyoDKellukeDynamitapDynamitKmForMeDynamitMDynamitymtKellukeForMeufumFfyiKirea \ No newline at end of file diff --git a/src/main/scala/eu/sim642/mits2024/Day1.scala b/src/main/scala/eu/sim642/mits2024/Day1.scala new file mode 100644 index 00000000..4e167092 --- /dev/null +++ b/src/main/scala/eu/sim642/mits2024/Day1.scala @@ -0,0 +1,24 @@ +package eu.sim642.mits2024 + +import eu.sim642.adventofcodelib.IteratorImplicits.* + +object Day1 { + + case class Input(kelluke: BigDecimal, forMe: BigDecimal, dynamit: BigDecimal, order: String) { + def orderTotal: BigDecimal = { + val it = """(Kelluke|ForMe|Dynamit)""".r.findAllMatchIn(order) + val freqs = it.groupCount(_.matched).withDefaultValue(0) + freqs("Kelluke") * kelluke + freqs("ForMe") * forMe + freqs("Dynamit") * dynamit + } + } + + def parseInput(input: String): Input = input match { + case s"Kelluke: $kelluke\nForMe: $forMe\nDynamit: $dynamit\n$order" => Input(BigDecimal(kelluke), BigDecimal(forMe), BigDecimal(dynamit), order) + } + + lazy val input: String = scala.io.Source.fromInputStream(getClass.getResourceAsStream("day1.txt")).mkString.trim + + def main(args: Array[String]): Unit = { + println(parseInput(input).orderTotal) + } +} diff --git a/src/test/scala/eu/sim642/mits2024/Day1Test.scala b/src/test/scala/eu/sim642/mits2024/Day1Test.scala new file mode 100644 index 00000000..2da5c02b --- /dev/null +++ b/src/test/scala/eu/sim642/mits2024/Day1Test.scala @@ -0,0 +1,22 @@ +package eu.sim642.mits2024 + +import Day1._ +import org.scalatest.funsuite.AnyFunSuite + +class Day1Test extends AnyFunSuite { + + val exampleInput = + """Kelluke: 1.64 + |ForMe: 1.89 + |Dynamit: 0.92 + |odForMedFuDrDynamiti""".stripMargin + + test("Example") { + assert(parseInput(exampleInput).orderTotal == 2.81) + } + + test("Input answer") { + assert(parseInput(input).orderTotal == + 74.64) + } +}