(phixonline)-->
with javascript_semantics
function spout(integer first, curr, sequence s)
string res
if first=curr-1 then
res = sprintf("%d",s[first])
else
integer sep = iff(first=curr-2?',':'-')
res = sprintf("%d%s%d",{s[first],sep,s[curr-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
constant r = {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}
printf(1,"%s\n",{extract_ranges(r)})