From dd114cdf9c97decc58fbcc77e647de1daa50a3aa Mon Sep 17 00:00:00 2001
From: Simmo Saan <simmo.saan@gmail.com>
Date: Sun, 1 Dec 2024 17:35:44 +0200
Subject: [PATCH] Solve MITS 2024 day 1

---
 .../resources/eu/sim642/mits2024/day1.txt     |  4 ++++
 src/main/scala/eu/sim642/mits2024/Day1.scala  | 24 +++++++++++++++++++
 .../scala/eu/sim642/mits2024/Day1Test.scala   | 22 +++++++++++++++++
 3 files changed, 50 insertions(+)
 create mode 100644 src/main/resources/eu/sim642/mits2024/day1.txt
 create mode 100644 src/main/scala/eu/sim642/mits2024/Day1.scala
 create mode 100644 src/test/scala/eu/sim642/mits2024/Day1Test.scala

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)
+  }
+}