26 lines
753 B
Scala
26 lines
753 B
Scala
object Range {
|
|
def spanRange(ls:List[Int])={
|
|
var last=ls.head
|
|
ls span {x => val b=x<=last+1; last=x; b}
|
|
}
|
|
|
|
def toRangeList(ls:List[Int]):List[List[Int]]=ls match {
|
|
case Nil => List()
|
|
case _ => spanRange(ls) match {
|
|
case (range, Nil) => List(range)
|
|
case (range, rest) => range :: toRangeList(rest)
|
|
}
|
|
}
|
|
|
|
def toRangeString(ls:List[List[Int]])=ls map {r=>
|
|
if(r.size<3) r mkString ","
|
|
else r.head + "-" + r.last
|
|
} mkString ","
|
|
|
|
def main(args: Array[String]): Unit = {
|
|
var l=List(0, 1, 2, 4, 6, 7, 8, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
|
|
27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39)
|
|
println(toRangeString(toRangeList(l)))
|
|
}
|
|
}
|