From 5cbaf153b1201dc7887b66a7523cc9506ce518fe Mon Sep 17 00:00:00 2001 From: StevanFreeborn Date: Thu, 26 May 2022 21:37:25 -0500 Subject: [PATCH] implement /api/solve route --- controllers/sudoku-solver.js | 11 ++++++++--- routes/api.js | 13 +++++++++++-- tests/1_unit-tests.js | 4 ++-- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/controllers/sudoku-solver.js b/controllers/sudoku-solver.js index aac6bce..fde741f 100644 --- a/controllers/sudoku-solver.js +++ b/controllers/sudoku-solver.js @@ -6,7 +6,11 @@ class SudokuSolver { validate(puzzleString) { - return puzzleString.length == 81 && !puzzleString.match(/[^\.\d]/g); + if (puzzleString.length != 81) return 'Expected puzzle to be 81 characters long'; + + if (puzzleString.match(/[^\.\d]/g)) return 'Invalid characters in puzzle'; + + return true; } @@ -173,7 +177,7 @@ class SudokuSolver { solve(puzzleString) { - if (!this.validate(puzzleString)) return false; + if (this.validate(puzzleString) != true) return false; // create character array let puzzle = puzzleString.split(''); @@ -311,7 +315,8 @@ class SudokuSolver { // get the solution for the given puzzle let board = generateBoard(puzzle); let solution = solveFromCell(board, 0, 0); - + + if (solution == false) return false; return solution.flat().join(''); } diff --git a/routes/api.js b/routes/api.js index 5da2c05..e585f37 100644 --- a/routes/api.js +++ b/routes/api.js @@ -1,6 +1,6 @@ 'use strict'; -const SudokuSolver = require('../controllers/sudoku-solver.js'); +const SudokuSolver = require('../controllers/sudoku-solver'); module.exports = function (app) { @@ -15,9 +15,18 @@ module.exports = function (app) { .post((req, res) => { const puzzleString = req.body.puzzle; - console.log(puzzleString); + if (puzzleString == undefined) return res.status(200).json({error: 'Required field missing' }); + + const validate = solver.validate(puzzleString); + + if (validate != true) return res.status(200).json({error: validate}); + + const solution = solver.solve(puzzleString); + if (solution == false) return res.status(200).json({error: 'Puzzle cannot be solved'}); + + return res.status(200).json({solution: solution}); }); }; \ No newline at end of file diff --git a/tests/1_unit-tests.js b/tests/1_unit-tests.js index 371cab9..9a2b997 100644 --- a/tests/1_unit-tests.js +++ b/tests/1_unit-tests.js @@ -20,7 +20,7 @@ suite('UnitTests', () => { const input = puzzlesAndSolutions[0][0].replace(/\./g, '?'); - assert.equal(solver.validate(input), false); + assert.equal(solver.validate(input), 'Invalid characters in puzzle'); done(); }); @@ -29,7 +29,7 @@ suite('UnitTests', () => { const input = puzzlesAndSolutions[0][0] + '0'; - assert.equal(solver.validate(input), false); + assert.equal(solver.validate(input), 'Expected puzzle to be 81 characters long'); done(); });