24 lines
606 B
Crystal
24 lines
606 B
Crystal
def range_extract (numbers)
|
|
ranges = [] of {Int32, Int32}
|
|
numbers.each do |n|
|
|
if (curr = ranges[-1]?) && curr.last == n - 1
|
|
ranges[-1] = { curr.first, n }
|
|
else
|
|
ranges << { n, n }
|
|
end
|
|
end
|
|
ranges.map {|start, stop|
|
|
if start == stop
|
|
start.to_s
|
|
elsif stop - start > 1
|
|
"#{start}-#{stop}"
|
|
else
|
|
"#{start},#{stop}"
|
|
end
|
|
}.join ","
|
|
end
|
|
|
|
puts range_extract [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]
|