Files
freecodecamp-sudoku-solver/controllers/sudoku-solver.js
T

140 lines
3.3 KiB
JavaScript

class SudokuSolver {
validate(puzzleString) {
return puzzleString.length == 81 && !puzzleString.match(/[^\.\d]/g);
}
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 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);
}
checkColPlacement(puzzleString, row, column, value) {
const columns = {
1: [],
2: [],
3: [],
4: [],
5: [],
6: [],
7: [],
8: [],
9: [],
};
const columnKeys = Object.keys(columns);
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) {
}
solve(puzzleString) {
}
}
module.exports = SudokuSolver;