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)