パズル
サードレベルのマジックスクエア。各行、各列、および各対角線の数値の合計が同じになるように、9つの異なる整数1〜9を3×3のテーブルに記入してみてください。
戦略
使い果たされた検索。すべての整数の塗りつぶしスキームとフィルターを一覧表示します。
JavaScriptソリューション
コードコピーは次のとおりです。
/**
* 12/28/14にChaoによって作成されました。
*/
関数getPermutation(arr){
if(arr.length == 1){
return [arr];
}
var順位= [];
for(var i = 0; i <arr.length; i ++){
var firstele = arr [i];
var arrclone = arr.slice(0);
arrclone.splice(i、1);
var childpermutation = getPermutation(arrclone);
for(var j = 0; j <childpermutation.length; j ++){
ChildPermutation [j] .unshift(firstele);
}
Permutation = permutation.concat(ChildPermutation);
}
戻り順位;
}
fultivalatecandidate(候補){
var sum =候補[0] +候補[1] +候補[2];
for(var i = 0; i <3; i ++){
if(!(sumofline(候補、i)== sum && sumofcolumn(候補、i)== sum)){
falseを返します。
}
}
if(sumofdiagonal(候補、true)== sum && sumofdiagonal(候補、false)== sum){
trueを返します。
}
falseを返します。
}
function sumofline(候補、行){
esturn estastate [line*3] +候補[line*3 + 1] +候補[line*3 + 2];
}
function sumofcolumn(候補、col){
候補[col] +候補[col + 3] +候補[col + 6];
}
function sumofdiagonal(候補、isforwardslash){
isforwardslashを返しますか?候補[2]+候補[4]+候補[6]:候補[0]+候補[4]+候補[8];
}
var順列= getPermutation([1,2,3,4,5,6,7,8,9]);
var候補者;
for(var i = 0; i <permutation.length; i ++){
候補=順調[i];
if(validAteCandidate(候補)){
壊す;
} それ以外 {
候補= null;
}
}
if(候補){
console.log(候補者);
} それ以外 {
console.log( '有効な結果が見つかりません');
}
結果
コードコピーは次のとおりです。
[2、7、6、9、5、1、4、3、8]
それを魔法の広場として描写することは次のとおりです。
コードコピーは次のとおりです。
2 7 6
9 5 1
4 3 8
分析します
この戦略を使用して、理論的には任意のNオーダーマジックスクエアの解を取得できますが、実際、n> 3の場合、すべての充填スキームを取得する時間のかかる動作が非常に大きくなるため、3次魔法の正方形の特定のソリューションのみを取得できます。