퍼즐
3차 마방진. 1부터 9까지의 9개의 서로 다른 정수를 3×3 테이블에 채워 각 행, 열, 대각선의 숫자의 합이 동일하도록 해보세요.
전략
철저한 검색. 모든 정수 패딩 시나리오를 나열한 다음 필터링합니다.
자바스크립트 솔루션
함수 getPermutation(arr) {
if (arr.length == 1) {
반품 [arr];
}
var 순열 = [];
for (var i=0; i
var arrClone = arr.slice(0);
arrClone.splice(i, 1);
var childPermutation = getPermutation(arrClone);
for (var j=0; j
}
순열 = permutation.concat(childPermutation);
}
순열 반환;
}
함수 verifyCandidate(후보) {
var sum = 후보[0] 후보[1] 후보[2];
for (var i=0; i
If (!(sumOfLine(candidate,i)==sum && sumOfColumn(candidate,i)==sum)) {
거짓을 반환합니다.
}
}
if (sumOfDiagonal(candidate,true)==sum && sumOfDiagonal(candidate,false)==sum) {
true를 반환합니다.
}
false를 반환합니다.
}
function sumOfLine(후보, 라인) {
return Candidate[라인*3] Candidate[라인*3 1] Candidate[라인*3 2];
}
함수 sumOfColumn(후보, 열) {
반환 후보[열] 후보[열 3] 후보[열 6];
}
함수 sumOfDiagonal(candidate, isForwardSlash) {
return isForwardSlash ? 후보[2] 후보[4] 후보[6] : 후보[0] 후보[4] 후보[8];
}
var 순열 = getPermutation([1,2,3,4,5,6,7,8,9]);
var 후보;
for (var i=0; i
if (validateCandidate(후보)) {
휴식;
} 그 밖의 {
후보 = null;
}
}
if (후보자) {
console.log(후보);
} 그 밖의 {
console.log('유효한 결과가 없습니다.');
}
결과
은 마방진으로 표현됩니다.
분석
이 전략을 사용하면 이론적으로는 모든 n차 마방진에 대한 해를 얻을 수 있지만 실제로는 3차 마방진의 특정 해만 얻을 수 있습니다. 모든 충전 솔루션은 시간이 많이 소요됩니다.