package main import ( student "student" "github.com/01-edu/public/test-go/lib" ) func ifNegative(a []string, n int) int { if n < 0 { n = len(a) + n } if n < 0 { n = 0 } else if n > len(a) { n = len(a) } return n } func slice(a []string, nbr ...int) []string { if len(nbr) == 0 { return a } first := nbr[0] if len(nbr) == 1 { if first < 0 { first = len(a) + first if first < 0 { return a } } return a[first:] } second := nbr[1] first = ifNegative(a, first) second = ifNegative(a, second) if first > second { return nil } return a[first:second] } func main() { elems := [][]interface{}{ { []string{"coding", "algorithm", "ascii", "package", "golang"}, 1, }, { []string{"coding", "algorithm", "ascii", "package", "golang"}, -3, }, { []string{"coding", "algorithm", "ascii", "package", "golang"}, 2, 4, }, { []string{"coding", "algorithm", "ascii", "package", "golang"}, -2, -1, }, { []string{"coding", "algorithm", "ascii", "package", "golang"}, 2, 0, }, } s := lib.MultRandWords() elems = append(elems, []interface{}{s, -len(s) - 10, -len(s) - 5}) for i := 0; i < 3; i++ { s = lib.MultRandWords() elems = append(elems, []interface{}{s, lib.RandIntBetween(-len(s)-10, len(s)+10), lib.RandIntBetween(-len(s)-8, len(s)+10)}) } for _, a := range elems { lib.Challenge("Slice", student.Slice, slice, a...) } }