Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import io.Source
- object day20 extends App {
- case class Range(val from: Long, val to: Long)
- def merge(rs: List[Range], sep: List[Range] = Nil): List[Range] = rs match {
- case x :: y :: t =>
- if (y.from > x.to + 1) merge(y :: t, x :: sep)
- else merge(Range(x.from, x.to max y.to) :: t, sep)
- case _ => (rs ::: sep).reverse
- }
- def whitelisted(rs: List[Range], acc: Long = 0): Long = rs match {
- case _ :: Nil => acc
- case h :: x :: t => whitelisted(x :: t, acc + x.from - h.to - 1)
- }
- val input = Source.fromFile("day20.txt").getLines.toList
- val ranges = input.map(i => i.split('-')).map(i => Range(i.head.toLong, i.last.toLong))
- val merged = merge(ranges.sortBy(_.from))
- println(merged.head.to + 1)
- println(whitelisted(merged))
- }
Advertisement
Add Comment
Please, Sign In to add comment