RosettaCodeData/Task/Range-extraction/E/range-extraction-1.e

18 lines
528 B
Plaintext

def rex(numbers :List[int]) {
var region := 0..!0
for n in numbers { region |= n..n }
var ranges := []
for interval in region.getSimpleRegions() {
def a := interval.getOptStart()
def b := interval.getOptBound() - 1
ranges with= if (b > a + 1) {
`$a-$b`
} else if (b <=> a + 1) {
`$a,$b`
} else { # b <=> a
`$a`
}
}
return ",".rjoin(ranges)
}