implement SudokuSolver.validate() method and write unit tests for method
This commit is contained in:
@@ -8,19 +8,73 @@ class SudokuSolver {
|
|||||||
|
|
||||||
checkRowPlacement(puzzleString, row, column, value) {
|
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) {
|
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) {
|
checkRegionPlacement(puzzleString, row, column, value) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+30
-1
@@ -28,12 +28,41 @@ suite('UnitTests', () => {
|
|||||||
test('SudokuSolver.validate(puzzleString) puzzle string of 82 characters with valid characters', (done) => {
|
test('SudokuSolver.validate(puzzleString) puzzle string of 82 characters with valid characters', (done) => {
|
||||||
|
|
||||||
const input = puzzlesAndSolutions[0][0] + '0';
|
const input = puzzlesAndSolutions[0][0] + '0';
|
||||||
|
|
||||||
assert.equal(solver.validate(input), false);
|
assert.equal(solver.validate(input), false);
|
||||||
done();
|
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();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
Reference in New Issue
Block a user