Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,6 @@ false, e.g.,
sudoku.generate("easy", false)
```

Note: **Puzzle uniqueness is not yet implemented**, so puzzles are *not*
guaranteed to have unique solutions.


Solve a Sudoku puzzle
--------------------------------------------------------------------------------
Expand Down
23 changes: 15 additions & 8 deletions sudoku.js
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,7 @@
e.g., 0 -> 17, and 100 -> 81.


By default, the puzzles are unique, uless you set `unique` to false.
(Note: Puzzle uniqueness is not yet implemented, so puzzles are *not*
guaranteed to have unique solutions)

TODO: Implement puzzle uniqueness
By default, the puzzles are unique, unless you set `unique` to false.
*/

// If `difficulty` is a string or undefined, convert it to a number or
Expand All @@ -98,7 +94,9 @@
MIN_GIVENS);

// Default unique to true
unique = unique || true;
if(typeof unique === "undefined"){
unique = true;
}

// Get a set of squares and all possible candidates for each square
var blank_board = "";
Expand Down Expand Up @@ -161,8 +159,17 @@

// Double check board is solvable
// TODO: Make a standalone board checker. Solve is expensive.
if(sudoku.solve(board)){
return board;
const solution = sudoku.solve(board);
if(solution){
if(!unique){
return board;
}
// Check if "backwards" solution is equal to regular solution.
// If it is, the sudoku has a unique solution.
const reverseSolution = sudoku.solve(board, true);
if(reverseSolution === solution){
return board;
}
}
}
}
Expand Down