Напишите функцию:
// RemoveAt возвращает новый слайс, в котором из s удалён элемент с индексом idx.
// Если idx выходит за пределы [0, len(s)-1], возвращается исходный слайс неизменённым.
func RemoveAt(s []int, idx int) []int
Требования:
- Нельзя использовать явные циклы (
for
,range
и т.п.). - Операцию удаления нужно выполнить только с помощью операций со слайсами и стандартной функции
append
.
Подсказки:
- Когда нужно удалить элемент с индексом
idx
, можно «склеить» две части слайса:// левый фрагмент: от начала до idx (не включая idx) left := s[:idx] // правый фрагмент: от idx+1 до конца (если idx+1 <= len(s)) right := s[idx+1:] // Склейка: append(left, right...)
- Не забудьте проверить, что
idx >= 0 && idx < len(s)
. Если это не так, просто вернуть исходныйs
.
Примеры
// № 1
s := []int{10, 20, 30, 40, 50}
res := RemoveAt(s, 2) // удаляем элемент с индексом 2 (значение 30)
fmt.Println(res) // ожидаемый вывод: [10 20 40 50]
// № 2
s := []int{1, 2, 3}
res := RemoveAt(s, 0) // удаляем элемент с индексом 0 (значение 1)
fmt.Println(res) // ожидаемый вывод: [2 3]
// № 3
s := []int{5, 6, 7}
res := RemoveAt(s, 5) // idx = 5 выходит за пределы (len(s)=3)
fmt.Println(res) // ожидаемый вывод: [5 6 7] (слайс не изменился)
// №4
s := []int{100, 200, 300}
res := RemoveAt(s, -1) // idx = -1 тоже неверный
fmt.Println(res) // ожидаемый вывод: [100 200 300] (слайс не изменился)
Что проверяет задача:
- Понимание того, как работают операции
s[:i]
иs[i+1:]
. - Умение «склеивать» части слайса через
append(left, right...)
. - Правильную проверку границ индекса.
- Отсутствие лишних копий/циклов в коде — вся логика сводится к одному вызову
append
.