Назад к вопросам
Аэрофлот
Middle+
3
Как бы вы искали соседей, если бы реализовывали игровое поле через одномерный массив вместо двумерного?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Если игровое поле хранится в одномерном массиве, то для поиска соседей нужно знать ширину поля (например, width). Тогда позиция клетки с координатами (x, y) соответствует индексу index = y * width + x.
Чтобы найти соседей, нужно вычислить индексы соседних клеток с учётом границ поля:
- Сосед слева:
index - 1(еслиx > 0) - Сосед справа:
index + 1(еслиx < width - 1) - Сосед сверху:
index - width(еслиy > 0) - Сосед снизу:
index + width(еслиy < height - 1)
Если нужны диагональные соседи, добавляем:
- Верхний левый:
index - width - 1(еслиx > 0иy > 0) - Верхний правый:
index - width + 1(еслиx < width - 1иy > 0) - Нижний левый:
index + width - 1(еслиx > 0иy < height - 1) - Нижний правый:
index + width + 1(еслиx < width - 1иy < height - 1)
Пример на JavaScript:
function getNeighbors(index, width, height) {
const x = index % width;
const y = Math.floor(index / width);
const neighbors = [];
if (x > 0) neighbors.push(index - 1); // слева
if (x < width - 1) neighbors.push(index + 1); // справа
if (y > 0) neighbors.push(index - width); // сверху
if (y < height - 1) neighbors.push(index + width); // снизу
// Диагонали
if (x > 0 && y > 0) neighbors.push(index - width - 1); // верхний левый
if (x < width - 1 && y > 0) neighbors.push(index - width + 1); // верхний правый
if (x > 0 && y < height - 1) neighbors.push(index + width - 1); // нижний левый
if (x < width - 1 && y < height - 1) neighbors.push(index + width + 1); // нижний правый
return neighbors;
}
Таким образом, используя арифметику индексов и проверку границ, можно эффективно находить соседей в одномерном массиве.