27 lines
724 B
Plaintext
27 lines
724 B
Plaintext
function spout(integer first, integer this, sequence s)
|
|
string res
|
|
if first=this-1 then
|
|
res = sprintf("%d",s[first])
|
|
else
|
|
res = sprintf("%d%s%d",{s[first],iff(first=this-2?',':'-'),s[this-1]})
|
|
end if
|
|
return res
|
|
end function
|
|
|
|
function extract_ranges(sequence s)
|
|
integer first = 1
|
|
string out = ""
|
|
if length(s)!=0 then
|
|
for i=2 to length(s) do
|
|
if s[i]!=s[i-1]+1 then
|
|
out &= spout(first,i,s)&','
|
|
first = i
|
|
end if
|
|
end for
|
|
out &= spout(first,length(s)+1,s)
|
|
end if
|
|
return out
|
|
end function
|
|
|
|
puts(1,extract_ranges({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}))
|