aoc2024

Advent of Code 2024
Log | Files | Refs | README

Day5.scala (996B)


      1 def day5_pt1(input: Iterator[String]): Int =
      2     val (rules, updates) = parse_input(input)
      3     updates
      4         .filter(l => l.sliding(2).forall(ll => rules.contains((ll(0), ll(1)))))
      5         .map(l => l(l.size / 2))
      6         .sum
      7 
      8 def day5_pt2(input: Iterator[String]): Int =
      9     val (rules, updates) = parse_input(input)
     10     updates
     11         .filter(l => !(l.sliding(2).forall(ll => rules.contains((ll(0), ll(1))))))
     12         .map(lst => lst.sortWith((a, b) => rules.contains((a, b))))
     13         .map(l => l(l.size / 2))
     14         .sum
     15 
     16 def parse_input(input: Iterator[String]): (List[(Int,Int)], List[List[Int]]) =
     17     val lst = input.toList
     18     val ix = lst.indexOf("")
     19     val rulesStrs = lst.slice(0, ix)
     20     val updatesStrs = lst.slice(ix+1, lst.size)
     21     val rules = rulesStrs.map(s => {
     22         val a = s.split("\\|").map(ss => Integer.parseInt(ss))
     23         (a(0), a(1))
     24     })
     25     val updates = updatesStrs.map(s => s.split(",").map(s => Integer.parseInt(s)).toList)
     26     return (rules, updates)