Magic Square
by Ryan Allison
HTML
Magic Number
<br>
<input type="text" id="txtNumber" />
<br><br>
<input type="button" id="btnRun" value="Run"/>
<br><br>
<span id="spnLoading" style="display:none;">Calculating</span>
<br>
<span id="spnOutput"></span>
CSS
table
{
empty-cells: hide;
}
td
{
width:25px;
height:25px;
text-align:center;
}
.sum
{
background-color:lightgray;
}
JavaScript
$("#btnRun").click( function() {
debugger;
$("#spnLoading").show();
var inputNumber = Number($("#txtNumber").val());
if (testInput(inputNumber)) {
var successfulArray = [];
var isMagicSquare = false;
var counter = 0;
while (isMagicSquare == false) {
var tempArray = fillArray(inputNumber);
if (testArray(tempArray)) {
isMagicSquare = true;
successfulArray = tempArray;
}
counter++;
if (counter == 10000000) {
isMagicSquare = true;
}
}
outputResults(successfulArray);
} else {
$("#spnOutput").html("Not a positive integer");
}
$("#spnLoading").hide();
});
function fillArray(n) {
var numArray = [];
while (numArray.length < 9) {
var tempNum = Math.floor(Math.random() * n) + 1;
if (!arrayContains(numArray, tempNum)) {
numArray.push(tempNum);
}
}
return numArray;
}
function testArray(temp) {
var a = temp[0];
var b = temp[1];
var c = temp[2];
var d = temp[3];
var e = temp[4];
var f = temp[5];
var g = temp[6];
var h = temp[7];
var i = temp[8];
var test = (a+b+c);
if (
(d+e+f) == test &&
(g+h+i) == test &&
(a+d+c) == test &&
(b+e+h) == test &&
(c+f+i) == test &&
(a+e+i) == test &&
(g+e+c) == test
) {
return true;
}
return false;
}
function outputResults(success) {
//alert(success);
var a = success[0];
var b = success[1];
var c = success[2];
var d = success[3];
var e = success[4];
var f = success[5];
var g = success[6];
var h = success[7];
var i = success[8];
var outputString = "<table cellspacing='0'><tr><td></td><td></td><td></td><td class='sum'>" + (g+e+c) + "</td></tr>";
outputString += "<tr><td>" + a + "</td><td>" + b + "</td><td>" + c + "</td><td class='sum'>" + (a+b+c) + "</td></tr>";
outputString += "<tr><td>" + d + "</td><td>" + e + "</td><td>" + f + "</td><td class='sum'>" + (d+e+f) + "</td></tr>";
outputString += "<tr><td>" + g + "</td><td>" + h + "</td><td>" + i + "</td><td...