summaryrefslogtreecommitdiff
path: root/2024/scala/day1.scala
diff options
context:
space:
mode:
Diffstat (limited to '2024/scala/day1.scala')
-rw-r--r--2024/scala/day1.scala38
1 files changed, 38 insertions, 0 deletions
diff --git a/2024/scala/day1.scala b/2024/scala/day1.scala
new file mode 100644
index 0000000..3803572
--- /dev/null
+++ b/2024/scala/day1.scala
@@ -0,0 +1,38 @@
+import scala.io.Source
+
+object Day1 {
+ def part1(lefts: Array[Int], rights: Array[Int]): Int = {
+ lefts
+ .zip(rights)
+ .map { case (l, r) =>
+ math.abs(l - r)
+ }
+ .sum
+ }
+
+ def part2(lefts: Array[Int], rights: Array[Int]): Int = {
+ val rightsCount = rights.groupBy(identity).map { case (k, v) =>
+ (k, v.size)
+ }
+ lefts
+ .map(x => x * rightsCount.getOrElse(x, 0))
+ .sum
+ }
+
+ def main(args: Array[String]): Unit = {
+ val lines =
+ Source
+ .fromFile(args(0))
+ .mkString
+ .split("\n")
+ .map(_.split(" ").map(_.toInt))
+
+ val (lefts_, rights_) = lines.map(arr => (arr(0), arr(1))).unzip
+ val lefts = lefts_.sorted
+ val rights = rights_.sorted
+
+ assert(part1(lefts, rights) == 3569916)
+ assert(part2(lefts, rights) == 26407426)
+ }
+}
+