Как исключить выходящие за пределы матрицы данные

Необходимо написать функцию, которая для элемента возвращает всех его соседей. Диагональные элементы соседями не считаются.

В целом задача решена, но в случае если элементы выходят за пределы матрицы, то компилятор выдает ошибку 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
}
→ Ссылка