RosettaCodeData/Task/Range-extraction/V-(Vlang)/range-extraction.v
2026-04-30 12:34:36 -04:00

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