$ include "seed7_05.s7i"; const func string: rangeExtraction (in array integer: numbers) is func result var string: rangeStri is ""; local var integer: index is 1; var integer: index2 is 1; begin while index <= length(numbers) do while index2 <= pred(length(numbers)) and numbers[succ(index2)] = succ(numbers[index2]) do incr(index2); end while; if succ(index) < index2 then rangeStri &:= "," <& numbers[index] <& "-" <& numbers[index2]; else while index <= index2 do rangeStri &:= "," <& numbers[index]; incr(index); end while; end if; incr(index2); index := index2; end while; rangeStri := rangeStri[2 ..]; end func; const proc: main is func begin writeln(rangeExtraction([] (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))); end func;