(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)})