diff --git a/controllers/sudoku-solver.js b/controllers/sudoku-solver.js index d487217..ad5b7ee 100644 --- a/controllers/sudoku-solver.js +++ b/controllers/sudoku-solver.js @@ -8,19 +8,73 @@ class SudokuSolver { checkRowPlacement(puzzleString, row, column, value) { + // rows + const rows = { + A: [], + B: [], + C: [], + D: [], + E: [], + F: [], + G: [], + H: [], + I: [], + }; + // rowKeys + const rowKeys = Object.keys(rows); + + // split puzzle strings and assign row values for each row + rowKeys.forEach((key, index) => { + + const start = index * 9; + const end = start + 9; + + const rowValues = puzzleString.slice(start, end).split(''); + + rows[key] = rowValues + + }); + + // get row values for placement + const rowValues = rows[row]; + + // get existing value placed + const existingValue = rowValues[column - 1]; + + // make sure placement location does not already contain a number + // make sure placements row does not already have value. + return (existingValue == '.' || existingValue == value) && !rowValues.includes(value); } checkColPlacement(puzzleString, row, column, value) { + const columns = { + 1: [], + 2: [], + 3: [], + 4: [], + 5: [], + 6: [], + 7: [], + 8: [], + 9: [], + }; + const columnKeys = Object.keys(columns); + + columnKeys.forEach((key, index) => { + + + + }); } checkRegionPlacement(puzzleString, row, column, value) { - + } diff --git a/tests/1_unit-tests.js b/tests/1_unit-tests.js index 9304e86..2441374 100644 --- a/tests/1_unit-tests.js +++ b/tests/1_unit-tests.js @@ -28,12 +28,41 @@ suite('UnitTests', () => { test('SudokuSolver.validate(puzzleString) puzzle string of 82 characters with valid characters', (done) => { const input = puzzlesAndSolutions[0][0] + '0'; - + assert.equal(solver.validate(input), false); done(); }); + test('checkRowPlacement(puzzleString, row, column, value) valid row placement', (done) => { + + const input = puzzlesAndSolutions[0][0]; + + const row = 'A'; + + const column = '2'; + + const value = '9'; + + assert.equal(solver.checkRowPlacement(input, row, column, value), true); + done(); + + }); + + test('checkRowPlacement(puzzleString, row, column, value) invalid row placement', (done) => { + + const input = puzzlesAndSolutions[0][0]; + + const row = 'A'; + + const column = '2'; + + const value = '8'; + + assert.equal(solver.checkRowPlacement(input, row, column, value), false); + done(); + + }); }); \ No newline at end of file