mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 00:01:37 +08:00
39 lines
1.3 KiB
JavaScript
39 lines
1.3 KiB
JavaScript
/*
|
|
* Author: IcarusTheFly (https://github.com/IcarusTheFly)
|
|
* Minesweeper explanation can be found in: https://en.wikipedia.org/wiki/Minesweeper_(video_game)
|
|
* This function will take a rectangular matrix filled with boolean values - the value for a cell
|
|
* with a mine will be true, otherwise it will be false.
|
|
* As a result it will return a rectangular matrix where each cell will have an integer that
|
|
* counts all the mines in the adjacent cells
|
|
* Two cells should share at least one corner to be considered adjacent
|
|
*/
|
|
|
|
/**
|
|
* @function minesweeper
|
|
* @description It counts the amount of mines surrounding every cell and returns a formatted matrix
|
|
* @param {boolean[][]} matrix
|
|
* @returns {number[][]} Matrix of numbers with the amount of mines surrounding each cell
|
|
*/
|
|
|
|
export const minesweeper = (matrix) => {
|
|
const arrResult = []
|
|
for (let x = 0; x < matrix.length; x++) {
|
|
const arrLine = []
|
|
for (let y = 0; y < matrix[x].length; y++) {
|
|
let minesInCell = 0
|
|
for (let xi = x - 1; xi <= x + 1; xi++) {
|
|
if (matrix[xi] !== undefined) {
|
|
for (let yi = y - 1; yi <= y + 1; yi++) {
|
|
if ((xi !== x || yi !== y) && matrix[xi][yi] === true) {
|
|
minesInCell++
|
|
}
|
|
}
|
|
}
|
|
}
|
|
arrLine.push(minesInCell)
|
|
}
|
|
arrResult.push(arrLine)
|
|
}
|
|
return arrResult
|
|
}
|