From 2d815af9b8f8ff16e4e57f5a2474f7c3e8a44786 Mon Sep 17 00:00:00 2001 From: StevanFreeborn Date: Fri, 20 May 2022 23:23:35 -0500 Subject: [PATCH] implement SudokuSolver.checkColPlacement() method and wrote unit tests for method --- controllers/sudoku-solver.js | 60 ++++++++++++++++++++++++++++++++++-- tests/1_unit-tests.js | 24 +++++++++++++++ 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/controllers/sudoku-solver.js b/controllers/sudoku-solver.js index ad5b7ee..4391d8c 100644 --- a/controllers/sudoku-solver.js +++ b/controllers/sudoku-solver.js @@ -42,7 +42,7 @@ class SudokuSolver { // get existing value placed const existingValue = rowValues[column - 1]; - // make sure placement location does not already contain a number + // make sure placement location doesn't contain a value or contains same value // make sure placements row does not already have value. return (existingValue == '.' || existingValue == value) && !rowValues.includes(value); @@ -64,12 +64,66 @@ class SudokuSolver { const columnKeys = Object.keys(columns); - columnKeys.forEach((key, index) => { + let offset = 0; - + columnKeys.forEach(() => { + columnKeys.forEach((key, index) => { + + const start = index + (9 * offset) + const end = start + 1; + + const columnValue = puzzleString.slice(start, end); + + columns[key].push(columnValue); + + }); + + offset += 1; }); + // get column values for placement + const columnValues = columns[column]; + + // get existing value placed + let existingValue; + + switch (row) { + case 'A': + existingValue = columnValues[0]; + break; + case 'B': + existingValue = columnValues[1]; + break; + case 'C': + existingValue = columnValues[2]; + break; + case 'D': + existingValue = columnValues[3]; + break; + case 'E': + existingValue = columnValues[4]; + break; + case 'F': + existingValue = columnValues[5]; + break; + case 'G': + existingValue = columnValues[6]; + break; + case 'H': + existingValue = columnValues[7]; + break; + case 'I': + existingValue = columnValues[8]; + break; + default: + break; + } + + // make sure placement location doesn't contain a value or contains same value + // make sure placements row does not already have value. + return (existingValue == '.' || existingValue == value) && !columnValues.includes(value); + } checkRegionPlacement(puzzleString, row, column, value) { diff --git a/tests/1_unit-tests.js b/tests/1_unit-tests.js index a9eacbf..01413de 100644 --- a/tests/1_unit-tests.js +++ b/tests/1_unit-tests.js @@ -58,5 +58,29 @@ suite('UnitTests', () => { }); + test('checkColPlacement(puzzleString, row, column, value) valid column placement', (done) => { + + const input = puzzlesAndSolutions[0][0]; + const row = 'A'; + const column = '2'; + const value = '5'; + + assert.equal(solver.checkColPlacement(input, row, column, value), true); + done(); + + }); + + test('checkColPlacement(puzzleString, row, column, value) invalid column placement', (done) => { + + const input = puzzlesAndSolutions[0][0]; + const row = 'A'; + const column = '2'; + const value = '6'; + + assert.equal(solver.checkColPlacement(input, row, column, value), false); + done(); + + }); + }); \ No newline at end of file