36 lines
1.1 KiB
V
36 lines
1.1 KiB
V
fn append_range(p_result string, first int, prev int, index int, size int) string {
|
|
mut result := p_result
|
|
if first == prev { result += "$prev" }
|
|
else if first == prev - 1 { result += "$first,$prev"}
|
|
else { result += "$first-$prev" }
|
|
if index < size - 1 { result += "," }
|
|
return result
|
|
}
|
|
|
|
fn extract_range(list []int) string {
|
|
if list.len == 0 { return "" }
|
|
mut result := ""
|
|
mut first := list[0]
|
|
mut prev := first
|
|
for i := 1; i < list.len; i++ {
|
|
if list[i] == prev + 1 { prev++ }
|
|
else {
|
|
result = append_range(result, first, prev, i, list.len)
|
|
first = list[i]
|
|
prev = first
|
|
}
|
|
}
|
|
result = append_range(result, first, prev, list.len - 1, list.len)
|
|
return result
|
|
}
|
|
|
|
fn main() {
|
|
list1 := [-6, -3, -2, -1, 0, 1, 3, 4, 5, 7, 8, 9, 10, 11, 14, 15, 17, 18, 19, 20]
|
|
println(extract_range(list1))
|
|
println("")
|
|
list2 := [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]
|
|
println(extract_range(list2))
|
|
}
|