sudoku solution validator
by not important
HTML
<script src="http://searls.github.io/jasmine-all/jasmine-all-min.js"></script>
CoffeeScript
gridStrings = [
'751843926893625174642179583425316798176982345938754612364297851289531467517468239' # valid
'751843927893625174642179583425316798176982345938754612364297851289531467517468239' # invalid
'571843926893625174642179583425316798176982345938754612364297851289531467517468239' # invalid
'851743926693825174142679583425316798976182345738954612364297851289531467517468239' # invalid
]
isValidSolution = (gridString) ->
return false if gridString.length isnt 81
gridArray = gridStringToArray gridString
return false unless checkRows gridArray
return false unless checkColumns gridArray
return false unless checkBoxes gridArray
true
checkRows = (gridArray) ->
for y in [0...9]
arrCopy = gridArray[y].slice 0
unless arrCopy.sort().join('') is '123456789'
return false
true
checkColumns = (gridArray) ->
swappedGrid = []
for y in [0...9]
for x in [0...9]
swappedGrid[y] = [] unless swappedGrid[y]
swappedGrid[y][x] = gridArray[x][y]
return checkRows swappedGrid
checkBoxes = (gridArray) ->
for boxY in [0...3]
for boxX in [0...3]
boxCells = []
for y in [0...3]
for x in [0...3]
xIndex = x + (boxX * 3)
yIndex = y + (boxY * 3)
boxCells.push gridArray[yIndex][xIndex]
return false unless boxCells.sort('').join('') is '123456789'
true
gridStringToArray = (gridString) ->
gridArray = gridString.split ''
width = 9
arr = []
for y in [0...9]
arr[y] = []
for x in [0...9]
arr[y][x] = gridArray[y * width + x]
arr
describe 'isValidSolution', ->
it 'checks for incorrect string length', ->
invalidGridString = 'hello'
expect(isValidSolution(invalidGridString)).toEqual false
it 'handles correct case', ->
expect(isValidSolution(gridStrings[0])).toEqual true
it 'handles...