From 768f072476556dfccb8c182f0c8a06133cdd74b1 Mon Sep 17 00:00:00 2001 From: Skylar Grant Date: Fri, 5 Dec 2025 21:02:06 -0500 Subject: [PATCH] Part A and B done --- src/04a.js | 40 ++++++++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/04a.js b/src/04a.js index 099a8e8..3d3d16e 100644 --- a/src/04a.js +++ b/src/04a.js @@ -176,6 +176,20 @@ function checkAdjacent(rowIdx, colIdx) { } } +/** + * @param {Array} moveablePositions [rowIdx, colIdx] of all positions in which the roll can be removed + * @returns {Number} How many rolls were removed + */ +function removeRolls(moveablePositions) { + let removed = 0; + moveablePositions.forEach(pos => { + const row = rows[pos[0]]; + row[pos[1]] = '.'; + removed++; + }); + return removed; +} + const rows = new Array(); inputs.forEach(row => { const cols = parseRow(row); @@ -183,14 +197,24 @@ inputs.forEach(row => { return; }); -let moveableCount = 0; -for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) { - for (let colIdx = 0; colIdx < rows[rowIdx].length; colIdx++) { - const row = rows[rowIdx]; - const value = row[colIdx]; - if (value === '@') { - if (checkAdjacent(rowIdx, colIdx)) moveableCount++; +let done = false; +let totalRemoved = 0; +while (!done) { + let moveableCount = 0; + const moveablePositions = new Array(); + for (let rowIdx = 0; rowIdx < rows.length; rowIdx++) { + for (let colIdx = 0; colIdx < rows[rowIdx].length; colIdx++) { + const row = rows[rowIdx]; + const value = row[colIdx]; + if (value === '@') { + if (checkAdjacent(rowIdx, colIdx)) { + moveableCount++; + moveablePositions.push([rowIdx, colIdx]); + } + } } } + totalRemoved += removeRolls(moveablePositions); + if (moveableCount === 0) done = true; } -console.log(moveableCount); \ No newline at end of file +console.log(totalRemoved); \ No newline at end of file