38 lines
1.0 KiB
Plaintext
38 lines
1.0 KiB
Plaintext
var extractRange = Fn.new { |list|
|
|
if (list.isEmpty) return ""
|
|
var sb = ""
|
|
var first = list[0]
|
|
var prev = first
|
|
|
|
var append = Fn.new { |index|
|
|
if (first == prev) {
|
|
sb = sb + prev.toString
|
|
} else if (first == prev - 1) {
|
|
sb = sb + first.toString + "," + prev.toString
|
|
} else {
|
|
sb = sb + first.toString + "-" + prev.toString
|
|
}
|
|
if (index < list.count - 1) sb = sb + ","
|
|
}
|
|
|
|
for (i in 1...list.count) {
|
|
if (list[i] == prev + 1) {
|
|
prev = prev + 1
|
|
} else {
|
|
append.call(i)
|
|
first = list[i]
|
|
prev = first
|
|
}
|
|
}
|
|
append.call(list.count - 1)
|
|
return sb
|
|
}
|
|
|
|
var list1 = [-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]
|
|
System.print(extractRange.call(list1))
|
|
var list2 = [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]
|
|
System.print(extractRange.call(list2))
|