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