publicclass Sudoku { staticfinalint n = 3;// taille des régions int[][] unPlateau = newint[n*n][n*n]; /*
* Terminologie
*
* m est un plateau (de sudoku) si
* - m est un int [][] ne contenant que des entiers compris entre 0 et 9
* - m.length = n^2
* - m[i].length = n^2 pour tous les i de 0 à n^2-1
*
*/
staticString enClair (int[][] m){ /*
* Prérequis : m est un plateau de sudoku
* Résultat : une chaîne dont l'affichage permet de visualiser m
*
*/ String r = ""; for(int i = 0; i < n*n ; i++){ for(int j = 0; j < n*n ; j++){
r = r + m[i][j] + " "; if(j%n == n-1){r = r + " ";} } if(i%n == n-1){r = r + "\n";}
r = r + "\n"; }
r = r + " "; return r ; }// enClair
staticint[][] aPartirDe (String s){ /*
* Prérequis : s est une chaîne contenant au moins n^4 chiffres décimaux
* Résultat : un plateau de sudoku initialisé avec les n^4 premiers chiffres
* décimaux de s (les chiffres sont considérés comme rangés par lignes).
*/ int[][] m = newint[n*n][n*n]; int k = 0; for(int i = 0; i < m.length; i++){ for(int j = 0; j < m[i].length; j++){ while("0123456789".indexOf(s.charAt(k))==-1){k++;}
m[i][j] = (int) s.charAt(k) - (int)'0';
k++ ; } } return m ;
}// aPartirDe
staticboolean présentLigne (int[][] m, int v, int i){ /*
* Prérequis :
* - m est un plateau de sudoku
* - v est compris entre 1 et n^2
* - i est compris entre 0 et n^2-1
* Résultat : dans m, v est présent dans la ligne i
*
*/ returntrue;// A MODIFIER }// présentLigne
staticboolean présentColonne (int[][] m, int v, int j){ /*
* Prérequis :
* - m est un plateau de sudoku
* - v est compris entre 1 et n^2
* - j est compris entre 0 et n^2-1
* Résultat : dans m, v est présent dans la colonne j
*
*/ returntrue;// A MODIFIER }// présentColonne
staticboolean présentRégion (int[][] m, int v, int i, int j){ /*
* Prérequis :
* - m est un plateau de sudoku
* - v est compris entre 1 et n^2
* - i et j sont compris entre 0 et n^2-1
* Résultat : dans m, v est présent dans la région contenant la case <i, j>
*
*/ returntrue;// A MODIFIER }// présentRégion
staticboolean[] lesPossiblesEn (int[][] m, int i, int j){ /*
* Prérequis :
* - m est un plateau de sudoku
* - i et j sont compris entre 0 et n^2-1
* - m[i][j] vaut 0
* Résultat : un tableau r de longueur n^2+1 tel que, dans la tranche r[1..n^2]
* r[v] indique si v peut être placé en <i, j>
*
*/ returnnull;// A MODIFIER }// lesPossiblesEn
staticString enClair (boolean[] t){ /*
* Prérequis : t.length != 0
* Résultat :
* une chaîne contenant tous les indices i de la tranche [1..t.length-1] tels
* que t[i] soit vrai
*/ String r = "{"; for(int i = 1; i < t.length; i++){ if(t[i]){r = r + i + ", ";} } if(r.length()!= 1){r = r.substring(0, r.length()-2);} return r + "}"; }// enClair
staticint toutSeul (int[][] m, int i, int j){ /*
* Prérequis :
* - m est un plateau de sudoku
* - i et j sont compris entre 0 et n^2-1
* - m[i][j] vaut 0
* Résultat :
* - v si la seule valeur possible pour <i, j> est v
* - -1 dans les autres cas
*
*/ return-1;// A MODIFIER }// toutSeul
staticvoid essais (String grille){ /*
* Prérequis : grille représente une grille de sudoku
* (les chiffres sont considérés comme rangés par lignes)
*
* Effet :
* 1) affiche en clair la grille
* 2) affecte, tant que faire se peut, toutes les cases pour lesquelles il n'y
* a qu'une seule possibilité
* 3) affiche en clair le résultat final
*/ int[][] m = aPartirDe(grille); System.out.println("Problème\n\n"+enClair(m));
// A COMPLETER
System.out.println("Il se peut qu'on ait avancé\n\n"+enClair(m)); }// essais