From f3b96c008d7140cf80797058f47a7f3bd1a9cd4d Mon Sep 17 00:00:00 2001 From: John Serrano Date: Mon, 23 Dec 2024 11:24:31 -0500 Subject: [PATCH] Change solution challenge 17 v2 --- challenges-2024/challenge-17/detectBombs.js | 104 +++--------------- .../challenge-17/test/detectBombs.test.js | 2 +- 2 files changed, 18 insertions(+), 88 deletions(-) diff --git a/challenges-2024/challenge-17/detectBombs.js b/challenges-2024/challenge-17/detectBombs.js index 1f2a1f1..684f8d4 100644 --- a/challenges-2024/challenge-17/detectBombs.js +++ b/challenges-2024/challenge-17/detectBombs.js @@ -1,98 +1,28 @@ export function detectBombs(grid) { const result = [] - // console.log(grid.length) + const positions = [ + [-1, -1], + [-1, 0], + [-1, 1], + [0, -1], + [0, 1], + [1, -1], + [1, 0], + [1, 1], + ] + for (let i = 0; i < grid.length; i++) { const counts = [] const row = grid[i] for (let j = 0; j < row.length; j++) { - const isBorderTop = i === 0 - const isBorderBottom = i === grid.length - 1 - const isBorderLeft = j === 0 - const isBorderRight = j === grid[i].length - 1 - - if (isBorderTop && isBorderLeft) { - const next = grid[i][j + 1] - const bottom = grid[i + 1][j] - const diagonal = grid[i + 1][j + 1] - - let count = [next, bottom, diagonal].filter(Boolean).length - console.log({ count }) - counts.push(count) - } else if (isBorderTop && isBorderRight) { - const prev = grid[i][j - 1] - const bottom = grid[i + 1][j] - const diagonal = grid[i + 1][j - 1] - - let count = [prev, bottom, diagonal].filter(Boolean).length - console.log({ count }) - counts.push(count) - } else if (isBorderBottom && isBorderLeft) { - const next = grid[i][j + 1] - const top = grid[i - 1][j] - const diagonal = grid[i - 1][j + 1] - - let count = [next, top, diagonal].filter(Boolean).length - console.log({ count }) - counts.push(count) - } else if (isBorderTop) { - const prev = grid[i][j - 1] - const next = grid[i][j + 1] - const bottom = grid[i + 1][j] - const diagonalLeft = grid[i + 1][j - 1] - const diagonalRight = grid[i + 1][j + 1] - - let count = [prev, next, bottom, diagonalLeft, diagonalRight].filter(Boolean).length - counts.push(count) - } else if (isBorderBottom) { - const top = grid[i - 1][j] - const prev = grid[i][j - 1] - const next = grid[i][j + 1] - const diagonal = grid[i - 1][j + 1] - const diagonalBottom = grid[i - 1][j - 1] - - let count = [top, prev, next, diagonal, diagonalBottom].filter(Boolean).length - counts.push(count) - } else if (isBorderLeft) { - const next = grid[i][j + 1] - const top = grid[i - 1][j] - const bottom = grid[i + 1][j] - const diagonal = grid[i + 1][j + 1] - const diagonalTop = grid[i - 1][j + 1] - - let count = [next, top, bottom, diagonal, diagonalTop].filter(Boolean).length - counts.push(count) - } else if (isBorderRight) { - const prev = grid[i][j - 1] - const top = grid[i - 1][j] - const bottom = grid[i + 1][j] - const diagonal = grid[i + 1][j - 1] - const diagonalTop = grid[i - 1][j - 1] - - let count = [prev, top, bottom, diagonal, diagonalTop].filter(Boolean).length - counts.push(count) - } else { - const next = grid[i][j + 1] - const prev = grid[i][j - 1] - const bottom = grid[i + 1][j] - const top = grid[i - 1][j] - const diagonalTopRight = grid[i - 1][j + 1] - const diagonalBottomRight = grid[i + 1][j + 1] - const diagonalTopLeft = grid[i - 1][j - 1] - const diagonalBottomLeft = grid[i + 1][j - 1] + const validPositions = positions.filter(([rowOffset, colOffset]) => { + const newRow = i + rowOffset + const newCol = j + colOffset + return newRow >= 0 && newRow < grid.length && newCol >= 0 && newCol < grid[i].length && grid[newRow][newCol] + }) - let count = [ - next, - prev, - bottom, - top, - diagonalBottomRight, - diagonalTopRight, - diagonalBottomLeft, - diagonalTopLeft, - ].filter(Boolean).length - counts.push(count) - } + counts.push(validPositions.length) } result.push(counts) diff --git a/challenges-2024/challenge-17/test/detectBombs.test.js b/challenges-2024/challenge-17/test/detectBombs.test.js index d9e45bb..906f97f 100644 --- a/challenges-2024/challenge-17/test/detectBombs.test.js +++ b/challenges-2024/challenge-17/test/detectBombs.test.js @@ -8,7 +8,7 @@ describe('Files names', () => { ]) expect(result).toBeDefined() - expect(result).toBe([ + expect(result).toEqual([ [1, 2, 1], [2, 1, 1], [1, 1, 1],