Как исключить выходящие за пределы матрицы данные
Необходимо написать функцию, которая для элемента возвращает всех его соседей. Диагональные элементы соседями не считаются.
В целом задача решена, но в случае если элементы выходят за пределы матрицы, то компилятор выдает ошибку runtime error: index out of range [-1] . Теперь я думаю сделать условие, которое исключает выходящие за пределы матрицы данные. Подскажите как будет выглядеть такое условие? Я уже пытался сделать что то вроде: если элемент = -1, то удалить элемент из ответа. Но не работает.
package main
import "fmt"
func Input(y, x int) []int {
matrix := [][]int{
[]int{0, 2, 3},
[]int{2, 3, 1},
[]int{8, 7, 4},
[]int{3, 2, 1},
}
k := []int{matrix[y+1][x], matrix[y-1][x], matrix[y][x+1], matrix[y][x-1]}
for _, z := range k {
if z == -1 { //затык здесь
return append(k[z:], k[:z-1]...)
}
}
return k
}
func main() {
fmt.Println(Input(0, 0))
}
То есть для данного случая должен получиться ответ [2, 2]
Ответы (1 шт):
Автор решения: Maksim Fedorov
→ Ссылка
Это задачка просто на аккуратно проверить граничные случаи
func GrabNeigh(y, x int) ([]int, error) {
matrix := [][]int{
{0, 2, 3},
{2, 3, 1},
{8, 7, 4},
{3, 2, 1},
}
var res []int
h := len(matrix) - 1 // примитивная валидация, полагая что высота > 0
w := len(matrix[0]) - 1 // примитивная валидация, полагая что ширина > 0
if y > h || x > w {
return nil, errors.New("Out of range")
}
if y != 0 {
res = append(res, matrix[y-1][x])
}
if x != 0 {
res = append(res, matrix[y][x-1])
}
if y != h {
res = append(res, matrix[y+1][x])
}
if x != w {
res = append(res, matrix[y][x+1])
}
return res, nil
}