RosettaCodeData/Task/Range-extraction/Phix/range-extraction.phix

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