Last active
January 16, 2016 08:44
-
-
Save bluepnume/e1cc1428076e20c69d99 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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