1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
| <!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Sudoku</title>
<script>
var magrille = [];
/*grille.push([6, 1, 8, 0, 7, 2, 0, 0, 0]);
grille.push([0, 0, 0, 1, 9, 6, 0, 7, 0]);
grille.push([7, 0, 0, 0, 0, 0, 3, 1, 0]);
grille.push([0, 9, 0, 0, 0, 4, 7, 6, 0]);
grille.push([1, 0, 0, 0, 0, 0, 0, 0, 5]);
grille.push([0, 7, 2, 5, 0, 0, 0, 8, 0]);
grille.push([0, 5, 6, 0, 0, 0, 0, 0, 8]);
grille.push([0, 3, 0, 8, 2, 5, 0, 0, 0]);
grille.push([0, 0, 0, 6, 1, 0, 4, 5, 3]);*/
magrille.push([9,0,0,1,0,0,0,0,5]);
magrille.push([0,0,5,0,9,0,2,0,1]);
magrille.push([8,0,0,0,4,0,0,0,0]);
magrille.push([0,0,0,0,8,0,0,0,0]);
magrille.push([0,0,0,7,0,0,0,0,0]);
magrille.push([0,0,0,0,2,6,0,0,9]);
magrille.push([2,0,0,3,0,0,0,0,6]);
magrille.push([0,0,0,2,0,0,9,0,0]);
magrille.push([0,0,1,9,0,4,5,7,0]);
function AbsentLigne(numero, grille, ligne)
{
for( i=0; i<9; i++ )
{
if( grille[ligne][i] == numero )
{
return false;
}
}
return true;
}
function AbsentColonne(numero, grille, colonne)
{
for( i=0; i<9; i++ )
{
if( grille[i][colonne] == numero )
{
return false;
}
}
return true;
}
function AbsentCarre(numero, grille, ligne, colonne)
{
i = ligne - (ligne % 3);
j = colonne - (colonne % 3);
for( ligne=i; ligne<i+3; ligne++ )
{
for( colonne=j; colonne<j+3; colonne++ )
{
if( grille[ligne][colonne] == numero )
{
return false;
}
}
}
return true;
}
function Validation(grille, position)
{
// Si on est à 81, on a validé la grille car on sort de celle-ci
if( position == 9*9 )
{
return true;
}
//alert('Position : ' + position);
// On récupère les coordonnées de la case
ligne = Math.floor(position / 9);
colonne = position % 9;
//alert('Ligne : ' + ligne);
//alert('Colonne : ' + colonne);
// Si la case n'est pas vide, on passe à la suivante
if( grille[ligne][colonne] != 0 )
{
console.log('Case : ' + position + ' -> La case est déjà renseignée !');
return Validation(grille, position+1);
}
// On essaie chaque chiffre
for( numero=1; numero<=9; numero++ )
{
console.log('Case : ' + position + ' - Valeur testée : ' + numero);
// On vérifie si le chiffre est autorisé
if( AbsentLigne(numero, grille, ligne) && AbsentColonne(numero, grille, colonne) && AbsentCarre(numero, grille, ligne, colonne) )
{
//alert('Position : ' + position + ' (Ligne : ' + ligne + ' / Colonne : ' + colonne + ') - Numéro : ' + numero);
console.log('Case : ' + position + ' -> Valeur renseignée : ' + numero);
// On enregistre le chiffre dans la case
grille[ligne][colonne] = numero;
//console.log('Position : ' + position);
//console.log('Ligne : ' + ligne);
//console.log('Colonne : ' + colonne);
//console.table(grille);
if( Validation(grille, position+1) )
{
return true;
}
}
}
//alert('Pas de solution trouvée pour la case - Position : ' + position + ' (Ligne : ' + ligne + ' / Colonne : ' + colonne + ') !');
console.log('Case : ' + position + ' -> Reset');
// Tous les chiffres ont été testés, aucun n'est bon, on réinitialise la case
grille[ligne][colonne] = 0;
return false;
}
alert(Validation(magrille, 0));
</script>
</head>
<body>
</body>
</html> |
Partager