summaryrefslogtreecommitdiff
path: root/2024/scala/day1.scala
blob: 38035725cb3ea14b0b7dfea871d070b0d20fc25b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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)
  }
}