Untitled
unknown
golang
3 years ago
1.5 kB
10
Indexable
import (
"testing"
)
func compress(numbers []int) string {
result := ""
sort.Ints(numbers)
i := 0
counter := 0
flag := false
var iterNum,firstNum int = 0, 0
for i< len(numbers) {
iterNum := numbers[i]
firstNum := iterNum
j := i +1
for j < len(numbers) {
currentNum := numbers[j]
if firstNum + 1 == currentNum{
j +=1
counter += 1
firstNum = currentNum
flag = true
} else if counter != 0{
result += "," + fmt.Sprintf("%d-%d", iterNum, firstNum)
flag = false
break
} else {
result += "," + fmt.Sprintf("%d", firstNum)
break
}
}
i = j
j = 0
counter = 0
}
if flag{
result += "," + fmt.Sprintf("%d-%d", iterNum, firstNum)
} else {
result += "," + fmt.Sprintf("%d", firstNum)
}
return result
}
type testCase struct {
numbers []int
result string
}
func TestCompress(t *testing.T) {
for _, input := range []testCase{
{[]int{1, 4, 5, 2, 3, 9, 8, 11, 0}, "0-5,8-9,11"},
{[]int{1, 4, 3, 8, 2, 10, 9}, "1-4,8-10"},
{[]int{1, 4, 3, 2}, "1-4"},
{[]int{1, 4}, "1,4"},
{[]int{1}, "1"},
{[]int{}, ""},
} {
if result := compress(input.numbers); result != input.result {
t.Errorf("%v => %q, expected %q", input.numbers, result, input.result)
}
}
}Editor is loading...