49 lines
1.1 KiB
Plaintext
49 lines
1.1 KiB
Plaintext
go =>
|
|
Lists = [
|
|
[-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9,
|
|
10, 11, 14, 15, 17, 18, 19, 20],
|
|
[ 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],
|
|
1..20,
|
|
[13],
|
|
[11,12,13,15]
|
|
].
|
|
foreach(List in Lists)
|
|
println(List),
|
|
println(make_ranges(List)),
|
|
nl
|
|
end,
|
|
nl.
|
|
|
|
|
|
make_ranges(L) = Res =>
|
|
Ranges = [],
|
|
Range = [L[1]],
|
|
|
|
% Identify the range
|
|
foreach(I in 2..L.length)
|
|
Li1 = L[I-1],
|
|
Li = L[I],
|
|
if Li == Li1+1 then
|
|
Range := Range ++ [Li]
|
|
else
|
|
if length(Range) > 0 then
|
|
Ranges := Ranges ++ [Range]
|
|
end,
|
|
Range := [] ++ [Li]
|
|
end
|
|
end,
|
|
% pickup the last range
|
|
if length(Range) > 0 then
|
|
Ranges := Ranges ++ [Range]
|
|
end,
|
|
Res := join([get_range(R) : R in Ranges], ",").
|
|
|
|
|
|
% Convert to range representation
|
|
get_range(R) =
|
|
cond(R.length == 1,
|
|
R.first().to_string(),
|
|
min(R).to_string() ++ "-" ++ max(R).to_string()).
|