18 lines
528 B
Text
18 lines
528 B
Text
|
|
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)
|
||
|
|
}
|