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
| <!doctype html>
<html lang="fr">
<head>
<meta charset="utf-8">
<title>Sudoku</title>
<script>
var grille = [];
/*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]);*/
grille.push([9,0,0,1,0,0,0,0,5]);
grille.push([0,0,5,0,9,0,2,0,1]);
grille.push([8,0,0,0,4,0,0,0,0]);
grille.push([0,0,0,0,8,0,0,0,0]);
grille.push([0,0,0,7,0,0,0,0,0]);
grille.push([0,0,0,0,2,6,0,0,9]);
grille.push([2,0,0,3,0,0,0,0,6]);
grille.push([0,0,0,2,0,0,9,0,0]);
grille.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 )
{
return Validation(grille, position+1);
}
// On essaie chaque chiffre
for( numero=1; numero<=9; 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);
// 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 + ') !');
// Tous les chiffres ont été testés, aucun n'est bon, on réinitialise la case
grille[ligne][colonne] = 0;
return false;
}
alert(Validation(grille, 0));
</script>
</head>
<body>
</body>
</html> |
Partager