lluque

AoC day 20

Dec 27th, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.78 KB | None | 0 0
  1. import io.Source
  2.  
  3. object day20 extends App {
  4.  
  5.   case class Range(val from: Long, val to: Long)
  6.  
  7.   def merge(rs: List[Range], sep: List[Range] = Nil): List[Range] = rs match {
  8.     case x :: y :: t =>
  9.       if (y.from > x.to + 1) merge(y :: t, x :: sep)
  10.       else merge(Range(x.from, x.to max y.to) :: t, sep)
  11.     case _ => (rs ::: sep).reverse
  12.   }
  13.  
  14.   def whitelisted(rs: List[Range], acc: Long = 0): Long = rs match {
  15.     case _ :: Nil => acc
  16.     case h :: x :: t => whitelisted(x :: t, acc + x.from - h.to - 1)
  17.   }
  18.  
  19.   val input = Source.fromFile("day20.txt").getLines.toList
  20.   val ranges = input.map(i => i.split('-')).map(i => Range(i.head.toLong, i.last.toLong))
  21.  
  22.   val merged = merge(ranges.sortBy(_.from))
  23.   println(merged.head.to + 1)
  24.   println(whitelisted(merged))
  25.  
  26. }
Advertisement
Add Comment
Please, Sign In to add comment