Sudoku tester
by russau
JavaScript
var block = [[5,3,4,6,7,8,9,1,2],
[6,7,2,1,9,5,3,4,8],
[1,9,8,3,4,2,5,6,7],
[8,5,9,7,6,1,4,2,3],
[4,2,6,8,5,3,7,9,1],
[7,1,3,9,2,4,8,5,6],
[9,6,1,5,3,7,2,8,4],
[2,8,7,4,1,9,6,3,5],
[3,4,5,2,8,6,1,7,9]];
sodukuTest(block);
function sodukuTest(block)
{
for (var i=0; i<block.length; i++)
{
var a = lineTest(block, i, true );
$('body').append("row " + i + (a ? " y<br>" : " n<br>"));
a = lineTest(block, i, false );
$('body').append("column " + i + (a ? " y<br>" : " n<br>"));
}
for (var x=0; x<3; x++)
{
for (var y=0; y<3; y++)
{
var a = blockTest(block, x*3, y*3);
$('body').append(' ' + x*3 + ' ' + y*3);
$('body').append(a ? " y<br>" : " n<br>");
}
}
}
function blockTest(block, startX, startY)
{
var sum = 0;
var lowerb = 1;
var upperb = 9;
var dupes = {};
for (var i=0; i<9; i++)
{
x = startX + (i % 3);
y = startY + Math.floor(i/3)
var val = block[y][x];
//$('body').append("x " + x);
//$('body').append(", y " + y);
//$('body').append(", val " + val + "<br>");
sum += val;
if (val < lowerb || val > upperb) {
return false;
}
if (dupes[val] == null) dupes[val] = 1
else{
return false;
}
}
return (sum == 45);
}
function lineTest(block, pos, isRow)
{
var sum = 0;
var lowerb = 1;
var upperb = 9;
var dupes = {};
for (var i=0; i<block[pos].length; i++)
{
var val = isRow ? block[pos][i] : block[i][pos];
sum += val;
if (val < lowerb || val > upperb) {
return false;
}
if (dupes[val] == null) dupes[val] = 1
else return false;
}
return (sum == 45);
}