33 lines
953 B
Plaintext
33 lines
953 B
Plaintext
$ 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;
|