Skip to content

Instantly share code, notes, and snippets.

@bluepnume
Last active January 16, 2016 08:44
Show Gist options
  • Select an option

  • Save bluepnume/e1cc1428076e20c69d99 to your computer and use it in GitHub Desktop.

Select an option

Save bluepnume/e1cc1428076e20c69d99 to your computer and use it in GitHub Desktop.
var VALID_BOARD = [
[ 8,9,5,7,4,2,1,3,6 ],
[ 2,7,1,9,6,3,4,8,5 ],
[ 4,6,3,5,8,1,7,9,2 ],
[ 9,3,4,6,1,7,2,5,8 ],
[ 5,1,7,2,3,8,9,6,4 ],
[ 6,8,2,4,5,9,3,7,1 ],
[ 1,5,9,8,7,4,6,2,3 ],
[ 7,4,6,3,2,5,8,1,9 ],
[ 3,2,8,1,9,6,5,4,7 ]
];
var INVALID_BOARD_1 = [
[ 8,9,5,7,6,2,1,3,6 ],
[ 2,7,1,9,6,3,4,8,5 ],
[ 4,6,3,5,8,1,7,9,2 ],
[ 9,3,4,6,1,7,2,5,8 ],
[ 5,1,7,2,3,8,9,6,4 ],
[ 6,8,2,4,5,9,3,7,1 ],
[ 1,5,9,8,7,4,6,2,3 ],
[ 7,4,6,3,2,5,8,1,9 ],
[ 3,2,8,1,9,6,5,4,7 ]
];
var INVALID_BOARD_2 = [
[ 8,9,5,7,6,2,1,3,6 ],
[ 2,7,1,9,6,3,4,8,5 ],
[ 4,6,3,5,8,1,7,9,2 ],
[ 9,3,4,6,1,7,2,5,8 ],
[ 5,1,7,2,3,8,9,6,4 ],
[ 6,8,2,4,5,9,3,7,1 ],
[ 1,5,9,8,7,4,7,2,3 ],
[ 7,4,6,3,2,5,8,1,9 ],
[ 3,2,8,1,9,6,5,4,7 ]
];
function assert(condition, error) {
if (!condition) {
throw new Error(error);
}
}
var BOARD_SIZE = 9;
var SECTION_SIZE = 3;
assert(validateSudoku(VALID_BOARD) === true, 'Expected VALID_BOARD to be valid');
assert(validateSudoku(INVALID_BOARD_1) === false, 'Expected INVALID_BOARD_1 to be invalid');
assert(validateSudoku(INVALID_BOARD_2) === false, 'Expected INVALID_BOARD_2 to be invalid');
console.log('All tests passing');
function validateSudoku(board) {
// Validate rows
for (var y=0; y<BOARD_SIZE; y++) {
if (!validateGroup(board[y])) {
return false
}
}
// Validate columns
for (var x=0; x<BOARD_SIZE; x++) {
var group = [];
for (var y=0; y<BOARD_SIZE; y++) {
group.push(board[y][x]);
}
if (!validateGroup(group)) {
return false
}
}
// Validate groups
for (var x=0; x<BOARD_SIZE; x+=SECTION_SIZE) {
for (var y=0; y<BOARD_SIZE; y+=SECTION_SIZE) {
var group = [];
for (var sx=x; sx<(x+SECTION_SIZE); sx++) {
for (var sy=y; sy<(y+SECTION_SIZE); sy++) {
group.push(board[sy][sx]);
}
}
if (!validateGroup(group)) {
return false
}
}
}
return true;
}
function validateGroup(group) {
if (group.length !== BOARD_SIZE) {
return false;
}
for (var i=1; i<=BOARD_SIZE; i++) {
if (group.indexOf(i) === -1) {
return false;
}
}
return true;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment