Dia 17: Detecci贸n de bombas de carb贸n explosivo

El Grinch ha estado haciendo de las suyas en el Polo Norte y ha sembrado bombas de carb贸n explosivo 馃挘 en la f谩brica de juguetes de los duendes. Quiere que todos los juguetes queden inutilizados y por eso ha dejado una cuadr铆cula donde algunas celdas tienen carb贸n explosivo (true) y otras est谩n vac铆as (false).

Los duendes necesitan tu ayuda para mapear las zonas peligrosas. Cada celda vac铆a debe mostrar un n煤mero que indique cu谩ntas bombas de carb贸n explosivo hay en las posiciones adyacentes, incluidas las diagonales.

detectBombs([
  [true, false, false],
  [false, true, false],
  [false, false, false]
])
// [
//   [1, 2, 1],
//   [2, 1, 1],
//   [1, 1, 1]
// ]

detectBombs([
  [true, false],
  [false, false]
])
// [
//   [0, 1],
//   [1, 1]
// ]

detectBombs([
  [true, true],
  [false, false],
  [true, true]
])

// [
//   [1, 1],
//   [4, 4],
//   [1, 1]
// ]

Solution

function detectBombs(grid) {
  const rows = grid.length
  const cols = grid[0].length
  const result = Array.from({ length: rows }, () => Array(cols).fill(0))

  const directions = [
    [-1, -1], [-1, 0], [-1, 1],
    [0, -1], [0, 1],
    [1, -1], [1, 0], [1, 1]
  ]

  for (let row = 0; row < rows; row++) {
    for (let col = 0; col < cols; col++) {
      if (grid[row][col]) {
        directions.forEach(([dx, dy]) => {
          const newRow = row + dx
          const newCol = col + dy
          if (newRow >= 0 && newRow < rows && newCol >= 0 && newCol < cols) {
            result[newRow][newCol]++
          }
        })
      }
    }
  }

  return result
}

detectBombs([
  [false, true, false],
  [false, false, false],
  [true, false, false]
])