RosettaCodeData/Task/Range-extraction/Groovy/range-extraction-1.groovy

13 lines
445 B
Groovy

def range = { s, e -> s == e ? "${s}," : s == e - 1 ? "${s},${e}," : "${s}-${e}," }
def compressList = { list ->
def sb, start, end
(sb, start, end) = [''<<'', list[0], list[0]]
for (i in list[1..-1]) {
(sb, start, end) = i == end + 1 ? [sb, start, i] : [sb << range(start, end), i, i]
}
(sb << range(start, end))[0..-2].toString()
}
def compressRanges = { expanded -> compressList(Eval.me('[' + expanded + ']')) }