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) &&...