js-sudoku-generator
Version:
Sudoku generator implementation in Javascript
153 lines (133 loc) • 6 kB
JavaScript
function _exitError(i_sMsg) {
console.error(i_sMsg);
process.exit(1);
}
const
SudokuGenerator = require("./SudokuGenerator.js").SudokuGenerator,
OLD_SAVED_BOARD_SIGNATURE = `Mzg0MjE2NzU5Mjc5NTM0NjgxMTU2Nzg5NDMyNDYzOTUxMjc4OTI4NjQ3MzE1NTE3MzI4OTY0ODkyMTczNTQ2NjMxNDk1ODI3NzQ1ODYyMTkz`,
SAVED_BOARD_SIGNATURE = `NTQ5ODI3MTM2NjE3NTM5Mjg0MzgyNDE2NTk3NzUxOTQzNjI4ODI2NzUxMzQ5NDkzMjY4NzE1MTc0Mzg1OTYyOTM4NjcyNDUxMjY1MTk0ODczOlszLDYsOCwxMCwxNSwxNiwxOCwxOSwyNSwyNywzMCwzMSwzNSwzNiwzNywzOCw0MSw0Miw0Niw0OCw0OSw1Myw1NCw1OCw2MCw2Miw2Myw2NSw2Nyw2OCw2OSw3MSw3Miw3Myw3Niw4MF06WzAsMiwzLDUsNiw5LDEwLDExLDEyLDEzLDE1LDE3LDE5LDIxLDIyLDIzLDI0LDI1LDI3LDI4LDI5LDMwLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQyLDQzLDQ0LDQ1LDQ4LDUwLDUxLDUyLDU0LDU1LDU3LDU4LDU5LDYwLDYxLDYyLDY0LDY1LDY2LDY3LDY5LDc0LDc1LDc4LDc5LDgwXTpbMCwxLDQsNSw2LDcsOSwxMCwxMiwxMywxNCwxNywxOCwxOSwyMCwyMywyNSwyNiwyNywyOCwyOSwzMCwzMiwzNCwzNywzOCwzOSw0MSw0Myw0NCw0Nyw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3NSw3Niw3OCw3OSw4MF0=`,
OLD_LOADED_BOARD_SOLUTION = [
[],
[],
[],
[],
[],
[],
[],
[],
[]
],
LOADED_BOARD_SOLUTION = [
[],
[],
[],
[],
[],
[],
[],
[],
[]
],
LOADED_EASY_SHEET = [
[],
[],
["", "", 2, 4, 1, 6, 5, "", 7],
["", 5, 1, "", "", 3, 6, 2, ""],
["", "", "", 7, 5, "", "", 4, 9],
[],
["", 7, 4, 3, "", 5, "", 6, ""],
["", 3, "", 6, "", "", "", 5, ""],
["", "", 5, 1, "", 4, 8, 7, ""]
],
LOADED_MEDIUM_SHEET = [
["", 4, "", "", 2, "", "", 3, 6],
["", "", "", "", "", 9, "", 8, ""],
[],
["", "", "", "", 4, "", "", "", ""],
["", "", "", "", "", 1, "", "", ""],
["", 9, 3, "", 6, "", "", "", 5],
["", "", 4, "", "", "", "", "", ""],
[],
[]
],
LOADED_HARD_SHEET = [
["", "", 9, 8, "", "", "", "", 6],
["", "", 7, "", "", "", 2, 8, ""],
["", "", "", 4, 1, "", 5, "", ""],
["", "", "", "", 4, "", 6, "", 8],
[],
[],
["", "", "", "", "", "", "", "", ""],
["", "", "", "", "", "", "", "", ""],
["", 6, 5, "", "", 4, "", "", ""]
];
let l_oUniqueBoards,
l_oBoard,
l_bOK;
console.log("Generating 1 Boards...");
SudokuGenerator.generate(2);
console.log("generated 1 board: ", SudokuGenerator.generatedBoards[0].signature);
console.log("Printing board 0: ");
SudokuGenerator.generatedBoards[0].prettyPrint();
console.log("Printing board 1: ");
SudokuGenerator.generatedBoards[1].prettyPrint();
l_bOK = JSON.stringify(SudokuGenerator.generatedBoards[0].getSheet(0)) === JSON.stringify(SudokuGenerator.generatedBoards[0].getSheet(0));
console.log("Asserting single easy sheet: ", l_bOK);
if (!l_bOK) {
_exitError("Easy sheet validation failed");
}
l_bOK = JSON.stringify(SudokuGenerator.generatedBoards[0].getSheet(1)) === JSON.stringify(SudokuGenerator.generatedBoards[0].getSheet(1));
console.log("Asserting single medium sheet: ", l_bOK);
if (!l_bOK) {
_exitError("Medium sheet validation failed");
}
l_bOK = JSON.stringify(SudokuGenerator.generatedBoards[0].getSheet(2)) === JSON.stringify(SudokuGenerator.generatedBoards[0].getSheet(2));
console.log("Asserting single hard sheet: ", l_bOK);
if (!l_bOK) {
_exitError("Hard sheet validation failed");
}
console.log("Generating 100 Boards...");
SudokuGenerator.generate(100);
console.log("Asserting unicity of generated boards...");
l_oUniqueBoards = new Set(SudokuGenerator.generatedBoards.map(i_oBoard => i_oBoard.signature));
console.log(`Generated boards ${SudokuGenerator.generatedBoards.length}\nUnique Boards: ${l_oUniqueBoards.size}`);
console.log("Loading old saved board through signature...");
l_oBoard = SudokuGenerator.loadBoard(OLD_SAVED_BOARD_SIGNATURE);
if (l_oBoard) {
l_oBoard.prettyPrint();
if (JSON.stringify(l_oBoard.board) === JSON.stringify(OLD_LOADED_BOARD_SOLUTION)) {
console.log("Loaded board matches");
} else {
_exitError("Error loading board, mismatch");
}
} else {
_exitError("Error loading board, bad signature");
}
console.log("Loading saved board through signature...");
l_oBoard = SudokuGenerator.loadBoard(SAVED_BOARD_SIGNATURE);
if (l_oBoard) {
l_oBoard.prettyPrint();
if (JSON.stringify(l_oBoard.board) === JSON.stringify(LOADED_BOARD_SOLUTION)) {
console.log("Loaded board matches");
} else {
_exitError("Error loading board, mismatch");
}
} else {
_exitError("Error loading board, bad signature");
}
l_bOK = JSON.stringify(l_oBoard.getSheet(0)) === JSON.stringify(LOADED_EASY_SHEET);
console.log("Asserting single easy sheet: ", l_bOK);
if (!l_bOK) {
_exitError("Easy sheet validation failed");
}
l_bOK = JSON.stringify(l_oBoard.getSheet(1)) === JSON.stringify(LOADED_MEDIUM_SHEET);
console.log("Asserting single medium sheet: ", l_bOK);
if (!l_bOK) {
_exitError("Medium sheet validation failed");
}
l_bOK = JSON.stringify(l_oBoard.getSheet(2)) === JSON.stringify(LOADED_HARD_SHEET);
console.log("Asserting single hard sheet: ", l_bOK);
if (!l_bOK) {
_exitError("Medium sheet validation failed");
}
console.log("Goodbye.");