Я изо всех сил пытаюсь найти всех прямых соседей для данной позиции (которая является (usize, usize)
) в матрице N
x M
.
Матрица предоставляет метод get(p: Position) -> Option<T>
гдеон выполняет проверку границ и возвращает None
, если позиция находится вне диапазона.Это означает, что верхнюю границу не нужно проверять, но нижнюю границу все еще нужно.То есть он не теряет значение 0
в любом направлении.
Моей первой попыткой было выполнить итерацию по срезу &[-1, 0, 1]
и использовать checked_add
, но это не работает, поскольку -1
не являетсяusize
.
Моя следующая попытка состояла в том, чтобы вычесть 1 из моей позиции (как x
и y
), а затем выполнить итерацию по срезу &[0, 1, 2]
, но это не работает с позицией (0, _)
или (_, 0)
.
Я подготовил игровую площадку , где можно просто реализовать одну функцию.(Надеюсь, мои тесты верны)
type Position = (usize, usize) //x, y
fn get_neighbours(p: Position) -> impl Iterator<Item = Position> {
unimplemented!()
}
(impl Iterator
при необходимости можно заменить на Vec
).