Maison >interface Web >js tutoriel >JavaScript implémente un algorithme de carré magique de troisième ordre. Solution de puzzle_javascript skills
Puzzle
Carré magique de troisième ordre. Essayez de remplir 9 entiers différents de 1 à 9 dans un tableau 3×3 afin que la somme des nombres de chaque ligne, colonne et diagonale soit la même.
Stratégie
Recherche exhaustive. Répertoriez tous les scénarios de remplissage d’entiers, puis filtrez.
Solution JavaScript
fonction getPermutation(arr) {
if (arr.length == 1) {
Retour [arr];
>
var permutation = [];
pour (var i=0; i
var arrClone = arr.slice(0);
arrClone.splice(i, 1);
var childPermutation = getPermutation(arrClone);
pour (var j=0; j
>
Permutation = permutation.concat(childPermutation);
>
Permutation de retour ;
>
fonction validateCandidate(candidat) {
var somme = candidat[0] candidat[1] candidat[2];
pour (var i=0; i<3; i ) {
Si (!(sumOfLine(candidat,i)==somme && sumOfColumn(candidat,i)==somme)) {
Renvoie faux ;
>
>
if (sumOfDiagonal(candidat,true)==somme && sumOfDiagonal(candidat,false)==somme) {
Renvoie vrai ;
>
retourner faux ;
>
function sumOfLine(candidat, ligne) {
return candidate[line*3] candidate[line*3 1] candidate[line*3 2];
>
function sumOfColumn(candidat, col) {
retourner candidat[col] candidat[col 3] candidat[col 6];
>
fonction sumOfDiagonal (candidat, isForwardSlash) {
return isForwardSlash ? candidat[2] candidat[4] candidat[6] : candidat[0] candidat[4] candidat[8];
>
var permutation = getPermutation([1,2,3,4,5,6,7,8,9]);
candidat var;
pour (var i=0; i
if (validateCandidate(candidat)) {
Pause ;
} autre {
candidat = nul;
>
>
si (candidat) {
console.log(candidat);
} autre {
console.log('Aucun résultat valide trouvé');
>
Résultats
est représenté comme un carré magique :
Analyse
En utilisant cette stratégie, vous pouvez théoriquement obtenir la solution de n'importe quel carré magique d'ordre n, mais en fait vous ne pouvez obtenir que la solution spécifique du carré magique d'ordre 3, car lorsque n>3, l'opération exhaustive d'obtention toutes les solutions de remplissage sont Le temps sera extrêmement énorme.