Given a number of rows, columns, and mines, create a minesweeper board. Print the board where each mine is shown as an “X”.
const makeBoard = (rows, cols, mines) => { let board = initBoard(rows, cols) board = plantMines(rows, cols, board, mines) board = plantMinesCount(rows, cols, board) return board } const initBoard = (rows, cols) => { let board = [] for (let i = 0; i < rows; i++) { board[i] = new Array(cols) for (let j = 0; j < cols; j++) { board[i][j] = 0 } } return board } const plantMines = (rows, cols, board, mines) => { while (mines) { const r = randomNum(rows) const c = randomNum(cols) if (board[r][c] !== -1) { board[r][c] = -1 mines -= 1 } } return board } const plantMinesCount = (rows, cols, board) => { for (let i = 0; i < rows; i++) { for (let j = 0; j < cols; j++) { board = countAdjacentMines(i, j, board) } } return board } const countAdjacentMines = (row, col, board) => { if (board[row][col] == -1) { return board } const rowAbove = row - 1 const rowBelow = row + 1 const colLeft = col - 1 const colRight = col + 1 const adjacent = [ [rowAbove, colLeft], [rowAbove, col], [rowAbove, colRight], [row, colLeft], [row, colRight], [rowBelow, colLeft], [rowBelow, col], [rowBelow, colRight] ] let count = 0 for (let i = 0; i < adjacent.length; i++) { const coordinates = adjacent[i] const r = coordinates[0] const c = coordinates[1] if (r >= 0 && r < board.length && c >= 0 && c < board[r].length) { if (board[r][c] == -1) { count += 1 } } } board[row][col] = count return board } const drawBoard = (board) => { const rows = board.length const cols = board[0].length let output = "" for (let i = 0; i < rows; i++) { for (let j = 0; j < cols; j++) { const value = board[i][j] if (value == -1) { output += " X" } else { output = output + " " + value } } output += "\n" } return output } const randomNum = (max) => { return Math.floor(Math.random() * max) } const board = makeBoard(5, 5, 5) const drawn = drawBoard(board) console.log(board) console.log(drawn)
Here is the output:
[ [ 2, -1, 3, 2, -1 ], [ 3, -1, 4, -1, 2 ], [ 2, -1, 3, 1, 1 ], [ 1, 1, 1, 0, 0 ], [ 0, 0, 0, 0, 0 ] ] 2 X 3 2 X 3 X 4 X 2 2 X 3 1 1 1 1 1 0 0 0 0 0 0 0