создаю сапера на JS, есть двумерный массив заполненый нулями и единицами ,1 это мина, нужно создать массив заполненый числами количеством мин вокруг ячейки, не получаеться сделать из-за границ массива.
var mineField =
[
['0', '0', '0', '1', '0'],
['0', '1', '0', '0', '0'],
['0', '0', '1', '0', '1'],
['1', '0', '0', '1', '0'],
['0', '0', '1', '0', '0']
];
var markField=[];
for(var i = 0;i< mineField.length;i++){
markField[i] = [];
for(var j = 0; j< mineField[i].length; j++){
if(field[i][j] == 1)
markField[i][j] = "-1";//если мина то вносить -1
else{
var mineCounter = 0;//Количество мин вокруг ячейки
if (field[i-1][j-1] === 1) mineCounter++;
if (field[i-1][j] === 1) mineCounter++;
if (field[i-1][j+1] === 1) mineCounter++;
if (field[i][j-1] === 1) mineCounter++;
if (field[i][j+1] === 1) mineCounter++;
if (field[i+1][j-1] === 1) mineCounter++;
if (field[i+1][j] === 1) mineCounter++;
if (field[i+1][j+1] === 1) mineCounter++;
markField[i][j] = mineCounter;
}
}
}
Передумал закрывать как дубликат Не работает счетчик мин вокруг, так как это другой способ, который тоже имеет право на существование.
var field = [
[0, 0, 0, 1, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 1],
[1, 0, 0, 1, 0],
[0, 0, 1, 0, 0]
];
var mark = [];
for (var i = 0; i < field.length; i++) {
mark[i] = [];
for (var j = 0; j < field[i].length; j++) {
if (field[i][j] == 1)
mark[i][j] = 9; // для красоты вывода результата, 9 тоже не может быть
else {
var counter = 0;
if (field[i - 1] && field[i - 1][j - 1] == 1) counter++;
if (field[i - 1] && field[i - 1][j] == 1) counter++;
if (field[i - 1] && field[i - 1][j + 1] == 1) counter++;
if (field[i][j - 1] == 1) counter++;
if (field[i][j + 1] == 1) counter++;
if (field[i + 1] && field[i + 1][j - 1] == 1) counter++;
if (field[i + 1] && field[i + 1][j] == 1) counter++;
if (field[i + 1] && field[i + 1][j + 1] == 1) counter++;
mark[i][j] = counter;
}
}
}
for (i = 0; i < mark.length; i++)
console.log(JSON.stringify(mark[i]));
Просто проверяй границы матрицы. Если поле для суммирования лежит за пределами с учётом этих границ, - игнорируй его. Иначе добавляй в сумму.
let mineField = [
[0, 0, 0, 1, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 1],
[1, 0, 0, 1, 0],
[0, 0, 1, 0, 0],
];
let markField = [];
for (let row = 0, h = mineField.length - 1; row <= h; row++) {
markField.push([]);
for (let col = 0, w = mineField[row].length - 1; col <= w; col++) {
markField[row].push(
1 * (row > 0 && col > 0 && mineField[row - 1][col - 1]) +
1 * (row > 0 && mineField[row - 1][col ]) +
1 * (row > 0 && col < w && mineField[row - 1][col + 1]) +
1 * ( col > 0 && mineField[row ][col - 1]) +
1 * ( col < w && mineField[row ][col + 1]) +
1 * (row < h && col > 0 && mineField[row + 1][col - 1]) +
1 * (row < h && mineField[row + 1][col ]) +
1 * (row < h && col < w && mineField[row + 1][col + 1])
);
}
console.log(markField[row].join());
}
Как меняется крипторынок и к чему готовиться владельцам криптообменников
Как подгружать шрифты установленные в системе на примере сайта https://wordmarkit
нужно сделать так чтобы в корзине при добавление заказа текст "оформить заказ" был ссылкой ведущей на страницу к примеру basketphp
нужна помощь в создании аналога критической секции на javascript, то есть вход следующей функции в критическую секцию должен выполняться после...