#3x3の魔方陣とは
3x3の表組みに1から9の数字をすべて埋めます。
条件は、縦・横・斜めの数字の和がすべて同じ値になることです。
#コード
<html>
<head>
<title>魔方陣</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var n = 3; // 3x3魔方陣
// 1辺の和
var x = 0;
for (i = 1; i <= n*n; i++) {
x += i;
}
x = x / n;
// 和がXになる数字の組み合わせを探す
var y = [];
for (i = 1; i <= n*n; i++) {
for (j = i + 1; j <= n*n; j++) {
for (k = j + 1; k <= n*n; k++) {
if ((i + j + k) == x) {
y.push([i, j, k]);
continue;
}
}
}
}
// 各数字の使用回数を調べる
var c = [];
for (i = 1; i <= n*n; i++) {
c[i] = 0; // 初期化
}
for (i = 0; i < y.length; i++) {
for (j = 1; j <= n*n; j++) {
if (j == y[i][0] || j == y[i][1] || j == y[i][2]) {
c[j]+=1;
}
}
}
// 使用回数が最も多い数字を魔方陣の中心にする
var m = [];
m['e'] = 0;
for (i = 1, j = 0; i < c.length; i++ ) {
if (c[i] > j) {
j = c[i];
m['e'] = i;
}
}
// 次に使用回数が多い数字を魔方陣の4隅にする
var k = []
for (i = 1, j = 0; i < c.length; i++ ) {
j = c[m['e']] - 1;
if (c[i] == j) {
k.push(i);
}
}
m['a'] = k[0];
m['c'] = k[1];
m['g'] = k[2];
m['i'] = k[3];
// 残りの数字を確定する
m['b'] = x - m['a'] - m['c'];
m['d'] = x - m['a'] - m['g'];
m['f'] = x - m['c'] - m['i'];
m['h'] = x - m['g'] - m['i'];
// 描画
$("#a").html(m['a']);
$("#b").html(m['b']);
$("#c").html(m['c']);
$("#d").html(m['d']);
$("#e").html(m['e']);
$("#f").html(m['f']);
$("#g").html(m['g']);
$("#h").html(m['h']);
$("#i").html(m['i']);
});
</script>
<style>
table {
border-collapse: collapse;
}
td {
border: 1px #333 solid;
padding: 5px 10px;
}
</style>
</head>
<body>
<table>
<tr>
<td id="a">a</td>
<td id="b">b</td>
<td id="c">c</td>
</tr>
<tr>
<td id="d">d</td>
<td id="e">e</td>
<td id="f">f</td>
</tr>
<tr>
<td id="g">g</td>
<td id="h">h</td>
<td id="i">i</td>
</tr>
</table>
</body>
</html>