diff --git a/modules/20-array-slice-map/15-slice/ru/EXERCISE.md b/modules/20-array-slice-map/15-slice/ru/EXERCISE.md index 6530c1c..9dc500c 100644 --- a/modules/20-array-slice-map/15-slice/ru/EXERCISE.md +++ b/modules/20-array-slice-map/15-slice/ru/EXERCISE.md @@ -1,2 +1,7 @@ +Реализуйте функцию Reverse(slice []int) []int, которая принимает слайс целых чисел и возвращает новый слайс с элементами в обратном порядке. -В Go нет встроенной функции удаления элемента из слайса. Реализуйте функцию `Remove(nums []int, i int) []int`, которая удаляет элемент по индексу `i` из слайса `nums`. Если приходит несуществующий индекс, то из функции возвращается исходный слайс. Порядок элементов может быть нарушен после удаления элемента. +```go +original := []int{1, 2, 3, 4, 5} +Reverse(original) // [5 4 3 2 1] +Reverse([]int{}) // [] +``` diff --git a/modules/20-array-slice-map/15-slice/solution.go b/modules/20-array-slice-map/15-slice/solution.go index 38541e8..cdff243 100644 --- a/modules/20-array-slice-map/15-slice/solution.go +++ b/modules/20-array-slice-map/15-slice/solution.go @@ -2,15 +2,14 @@ package solution // BEGIN -// Remove removes an item from the nums slice by index i. -func Remove(nums []int, i int) []int { - if i < 0 || i > len(nums)-1 { - return nums - } +func Reverse(slice []int) []int { + reversed := make([]int, len(slice)) - nums[i] = nums[len(nums)-1] + for i := len(slice) - 1; i >= 0; i-- { + reversed[len(slice)-1-i] = slice[i] + } - return nums[:len(nums)-1] + return reversed } // END diff --git a/modules/20-array-slice-map/15-slice/solution_test.go b/modules/20-array-slice-map/15-slice/solution_test.go index 67d109d..e6b1173 100644 --- a/modules/20-array-slice-map/15-slice/solution_test.go +++ b/modules/20-array-slice-map/15-slice/solution_test.go @@ -1,24 +1,15 @@ package solution import ( - "sort" "testing" "github.com/stretchr/testify/assert" ) -func TestRemove(t *testing.T) { +func TestReverse(t *testing.T) { a := assert.New(t) - equalSlices(a, []int{1, 2}, Remove([]int{1, 2}, -1)) - equalSlices(a, []int{1, 2}, Remove([]int{1, 2}, -5)) - equalSlices(a, []int{2, 3}, Remove([]int{1, 2, 3}, 0)) - equalSlices(a, []int{1, 2}, Remove([]int{1, 2, 3}, 2)) - equalSlices(a, []int{1, 2, 3}, Remove([]int{1, 2, 3}, 3)) - equalSlices(a, []int{1, 2, 3}, Remove([]int{1, 2, 3}, 5)) -} - -func equalSlices(a *assert.Assertions, expected, actual []int) { - sort.Ints(expected) - sort.Ints(actual) - a.Equal(expected, actual) + a.Equal([]int{4, 3, 2, 1}, Reverse([]int{1, 2, 3, 4})) + a.Equal([]int{}, Reverse([]int{})) + a.Equal([]int{-1, -2, -3, -4}, Reverse([]int{-4, -3, -2, -1})) + a.Equal([]int{3}, Reverse([]int{3})) }