Sudoku Puzzle Solver
by Steven Rogers
HTML
<form>
<div id="container">
</div>
<input type="RESET" />
</form>
<button id="solve" name="solve" onclick="solve();" >SOLVE</button>
CSS
input {width: 15px; height: 10px; margin: 0px;text-align:center;}
table,tr,td{border-collapse:collapse;}
table {margin:20px;padding:0px;border:none;border-spacing:0}
tr {margin:0px;padding:0px;border:none;border-spacing:0}
tr:nth-child(3n) {border-bottom:3px solid black;}
tr:first-child {border-top:3px solid black;}
td {margin:0px;padding:0px;border:none;border-spacing:0}
td:nth-child(3n) {border-right:3px solid black;}
td:first-child {border-left:3px solid black;}
JavaScript
window.onload=function(){
var tableString = "<table>";
for(x = 0; x < 9; x++){
tableString += "<tr>";
for(y = 0; y < 9; y++){
tableString += "<td><input type='text' pattern='\d' maxlength='1' id='box";
tableString += x + "-" + y;
tableString += "'></td>";
}
tableString += "</tr>";
}
tableString += "</table>";
document.getElementById('container').innerHTML = tableString;
}
function clear(){
document.getElementById('board').reset();
}
var gridState = [];
var gridDone = [];
var done = false;
function getGridState(){
gridState = [];
gridDone = [];
for(var x = 0; x < 9; x++){
gridState[x] = [];
gridDone[x] = [];
for(var y = 0; y < 9; y++){
gridDone[x][y] = false;
var box = parseInt(document.getElementById('box'+x+'-'+y).value);
if(isNaN(box)){
gridState[x][y] = [1,2,3,4,5,6,7,8,9];
} else {
gridState[x][y] = [box];
}
}
}
}
function removeNumFromCol(col,num){
var moves = 0;
for(var y = 0; y < 9; y++){
if(gridDone[col][y]){
continue;
}
if(gridState[col][y].indexOf(num) > -1){
gridState[col][y].splice(gridState[col][y].indexOf(num), 1);
moves += 1;
}
}
return moves;
}
function removeNumFromRow(row,num){
var moves = 0;
for(var x = 0; x < 9; x++){
if(gridDone[x][row]){
continue;
}
if(gridState[x][row].indexOf(num) > -1){
gridState[x][row].splice(gridState[x][row].indexOf(num), 1);
moves += 1;
}
}
return moves;
}
function removeNumFromSection(xpos,ypos,num){
var moves = 0;
var col = Math.floor(xpos/3);
var row = Math.floor(ypos/3);
for(var x = col*3;x < (col*3)+3;x++){
for(var y = row*3;y < (row*3)+3;y++){
if((gridDone[x][y]) || ((x === xpos) &&...