From 44ff6231441024d16fddc2b7cb648539522b04cb Mon Sep 17 00:00:00 2001 From: Maksymilian Jopek Date: Mon, 19 Dec 2022 21:04:23 +0100 Subject: v1.0.0 Added everything that's in the spec --- src/lib/sudoku/solve.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/lib/sudoku/solve.ts (limited to 'src/lib/sudoku/solve.ts') diff --git a/src/lib/sudoku/solve.ts b/src/lib/sudoku/solve.ts new file mode 100644 index 0000000..eedb576 --- /dev/null +++ b/src/lib/sudoku/solve.ts @@ -0,0 +1,35 @@ +function solve() { + let board = self.readBoard(true); + let backtrack = 0; + let guesswork = 0; + let dcount = 0; + let time = Date.now(); + if (solve()) { + stats(); + self.writeBytes(board); + el.classList.add("solved"); + } else { + stats(); + alert("no solution"); + } + function solve() { + let { index, moves, len } = analyze(board); + if (index == null) return true; + if (len > 1) guesswork++; + for (let m = 1; moves; m <<= 1) { + if (moves & m) { + dcount++; + board[index] = m; + if (solve()) return true; + moves ^= m; + } + } + board[index] = 0; + ++backtrack; + return false; + } + function stats() { + log(el, `${dcount} digits placed
${backtrack} take-backs
${guesswork} guesses
${Date.now() - time} milliseconds`); + } +} + -- cgit v1.3.1