You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

86 lines
1.4 KiB

package main
import (
student "student"
"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...)
}
}