47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
"use strict";
|
|
|
|
const SudokuSolver = require("../controllers/sudoku-solver.js");
|
|
|
|
module.exports = function (app) {
|
|
let solver = new SudokuSolver();
|
|
|
|
app.route("/api/check").post((req, res) => {
|
|
if (!req.body.puzzle || !req.body.coordinate || !req.body.value) {
|
|
return res.json({ error: "Required field(s) missing" });
|
|
}
|
|
if (!(req.body.value > 0) || !(req.body.value < 10)) {
|
|
return res.json({ error: "Invalid value" });
|
|
}
|
|
if (!/^[A-I][1-9]$/.test(req.body.coordinate)) {
|
|
return res.json({ error: "Invalid coordinate" });
|
|
}
|
|
let validString = solver.validate(req.body.puzzle);
|
|
if (validString !== true) {
|
|
return res.json(validString);
|
|
}
|
|
let row = req.body.coordinate[0].charCodeAt(0) - 65;
|
|
let col = req.body.coordinate[1] - 1;
|
|
let conflict = [];
|
|
let valid;
|
|
if (!solver.checkRowPlacement(req.body.puzzle, row, col, req.body.value)) {
|
|
conflict.push("row");
|
|
}
|
|
if (!solver.checkColPlacement(req.body.puzzle, row, col, req.body.value)) {
|
|
conflict.push("column");
|
|
}
|
|
if (
|
|
!solver.checkRegionPlacement(req.body.puzzle, row, col, req.body.value)
|
|
) {
|
|
conflict.push("region");
|
|
}
|
|
conflict.length > 0 ? (valid = false) : (valid = true);
|
|
res.json({ valid: valid, conflict: conflict });
|
|
});
|
|
|
|
app.route("/api/solve").post((req, res) => {
|
|
if (!req.body.puzzle) {
|
|
return res.json({ error: "Required field missing" });
|
|
}
|
|
res.json(solver.solve(req.body.puzzle));
|
|
});
|
|
};
|