diff --git a/app/src/main/java/sudoku/App.java b/app/src/main/java/sudoku/App.java index b28553a..b301bf5 100644 --- a/app/src/main/java/sudoku/App.java +++ b/app/src/main/java/sudoku/App.java @@ -1,22 +1,26 @@ package sudoku; +import java.util.logging.Level; +import java.util.logging.Logger; + public class App { + private static final Logger logger = Logger.getLogger(App.class.getName()); + public String getGreeting() { return "Hello World!"; } /** * Méthode main permettant de lancer l'application sudoku et d'afficher les erreurs s'il y en a. - * @param args + * @param args : arguments passés en paramètre */ public static void main(String[] args) { System.out.println(new App().getGreeting()); - try{ + try { Sudoku.menu(); - } catch (Exception e){ - System.err.println("Une erreur fatale est survenue : " + e.getMessage()); - e.printStackTrace(); + } catch (Exception e) { + logger.log(Level.SEVERE, "Une erreur fatale est survenue : " + e.getMessage(), e); } } -} +} \ No newline at end of file diff --git a/app/src/main/java/sudoku/Bloc.java b/app/src/main/java/sudoku/Bloc.java index fbb1dc7..b643a1a 100644 --- a/app/src/main/java/sudoku/Bloc.java +++ b/app/src/main/java/sudoku/Bloc.java @@ -9,8 +9,8 @@ public class Bloc { /** * Constructeur permettant de créer un bloc de couleur - * @param couleur - * @param couleurIndex + * @param couleur : couleur du bloc + * @param couleurIndex : index de la couleur */ public Bloc(String couleur, int couleurIndex) { this.cases = new ArrayList<>(); @@ -20,53 +20,31 @@ public class Bloc { /** * Méthode permettant d'ajouter une case à un bloc - * @param c + * @param c : case à ajouter */ public void ajouterCase(Case c) { cases.add(c); } - /** - * Méthode permettant de savoir si une case contient un symbole précis - * @param s - * @return - */ - public boolean contains(Symbole s) { - for (Case c : cases) { - if (c.getSymbole().equals(s)) { - return true; - } - } - return false; - } - /** * Méthode permettant de renvoyer la couleur d'un bloc - * @return + * @return couleur du bloc */ public String getCouleur() { return couleur; } - /** - * Méthode permettant de renvoyer l'index de couleur d'un bloc - * @return - */ - public int getCouleurIndex() { - return couleurIndex; - } - /** * Méthode permettant de renvoyer une liste de cases associée à un bloc - * @return + * @return liste de cases */ public List getCases() { return cases; } /** - * Méthode permettant d'afficher un bloc complet avec les cases qui le compose - * @return + * Méthode permettant d'afficher un bloc complet avec les cases qui le composent + * @return bloc complet avec les cases, la couleur et l'index de la couleur */ @Override public String toString() { diff --git a/app/src/main/java/sudoku/Case.java b/app/src/main/java/sudoku/Case.java index 9cb748a..823d8f4 100644 --- a/app/src/main/java/sudoku/Case.java +++ b/app/src/main/java/sudoku/Case.java @@ -7,9 +7,9 @@ public class Case { /** * Constructeur permettant de créer une case grace aux paramètres suivants : - * @param ligne - * @param colonne - * @param symbole + * @param ligne : coordonnée de la ligne + * @param colonne : coordonnée de la colonne + * @param symbole : symbole de la case */ public Case(int ligne, int colonne, Symbole symbole) { this.ligne = ligne; @@ -19,7 +19,7 @@ public class Case { /** * Méthode permettant de renvoyer la coordonnée de la ligne qui compose la case - * @return + * @return ligne */ public int getLigne() { return ligne; @@ -27,7 +27,7 @@ public class Case { /** * Méthode permettant de renvoyer la coordonnée de la colonne qui compose la case - * @return + * @return colonne */ public int getColonne() { return colonne; @@ -35,7 +35,7 @@ public class Case { /** * Méthode permettant de renvoyer le symbole qui compose la case - * @return + * @return symbole */ public Symbole getSymbole() { return symbole; @@ -43,7 +43,7 @@ public class Case { /** * Méthode permettant de modifier le symbole qui compose la case - * @param symbole + * @param symbole : symbole de la case */ public void setSymbole(Symbole symbole) { this.symbole = symbole; @@ -51,7 +51,7 @@ public class Case { /** * Méthode qui permet d'afficher le symbole de la case ou "-" si la case est vide - * @return + * @return symbole de la case */ @Override public String toString() { diff --git a/app/src/main/java/sudoku/ContrainteBloc.java b/app/src/main/java/sudoku/ContrainteBloc.java index e30e3ff..898add3 100644 --- a/app/src/main/java/sudoku/ContrainteBloc.java +++ b/app/src/main/java/sudoku/ContrainteBloc.java @@ -1,23 +1,33 @@ package sudoku; public class ContrainteBloc implements Contrainte { + private final int blocRows; + private final int blocCols; + /** - * Méthode permettant de savoir si l'ensemble des contraintes concernant le bloc sont respectées.
- * Renvoie 0 si au moins l'une des contraintes n'est pas respectée
- * Renvoie 1 si toutes les contraintes sont respectées - * @param grille - * @param c - * @return + * Constructeur permettant de créer une contrainte de bloc + * @param blocRows : nombre de lignes du bloc + * @param blocCols : nombre de colonnes du bloc + */ + public ContrainteBloc(int blocRows, int blocCols) { + this.blocRows = blocRows; + this.blocCols = blocCols; + } + + /** + * Méthode permettant de savoir pour une case donnée si l'ensemble des contraintes concernant le bloc sont respectées.
+ * @param grille : Grille + * @param c : Case + * @return boolean : true si toutes les contraintes sont respectées, false sinon */ @Override public boolean estRespectee(Grille grille, Case c) { - int blocSize = (int) Math.sqrt(grille.getTaille()); - int startRow = (c.getLigne() / blocSize) * blocSize; - int startCol = (c.getColonne() / blocSize) * blocSize; + int startRow = (c.getLigne() / blocRows) * blocRows; + int startCol = (c.getColonne() / blocCols) * blocCols; Symbole symbole = c.getSymbole(); - - for (int i = 0; i < blocSize; i++) { - for (int j = 0; j < blocSize; j++) { + + for (int i = 0; i < blocRows; i++) { + for (int j = 0; j < blocCols; j++) { Case currentCase = grille.getCase(startRow + i, startCol + j); if (currentCase != c && currentCase.getSymbole() != null && currentCase.getSymbole().equals(symbole)) { return false; diff --git a/app/src/main/java/sudoku/ContrainteColonne.java b/app/src/main/java/sudoku/ContrainteColonne.java index 41dbc81..145fc83 100644 --- a/app/src/main/java/sudoku/ContrainteColonne.java +++ b/app/src/main/java/sudoku/ContrainteColonne.java @@ -2,12 +2,10 @@ package sudoku; public class ContrainteColonne implements Contrainte { /** - * Méthode permettant de savoir si l'ensemble des contraintes concernant la colonne sont respectées.
- * Renvoie 0 si au moins l'une des contraintes n'est pas respectée
- * Renvoie 1 si toutes les contraintes sont respectées - * @param grille - * @param c - * @return + * Méthode permettant de savoir pour une case donnée si l'ensemble des contraintes concernant la colonne sont respectées.
+ * @param grille : Grille + * @param c : Case + * @return boolean : true si toutes les contraintes sont respectées, false sinon */ @Override public boolean estRespectee(Grille grille, Case c) { diff --git a/app/src/main/java/sudoku/ContrainteLigne.java b/app/src/main/java/sudoku/ContrainteLigne.java index 417bcf2..87faf4d 100644 --- a/app/src/main/java/sudoku/ContrainteLigne.java +++ b/app/src/main/java/sudoku/ContrainteLigne.java @@ -2,12 +2,12 @@ package sudoku; public class ContrainteLigne implements Contrainte { /** - * Méthode permettant de savoir si l'ensemble des contraintes concernant la ligne sont respectées.
- * Renvoie 0 si au moins l'une des contraintes n'est pas respectée
+ * Méthode permettant de savoir si l'ensemble des contraintes concernant la ligne sont respectées.
+ * Renvoie 0 si au moins l'une des contraintes n'est pas respectée
* Renvoie 1 si toutes les contraintes sont respectées - * @param grille - * @param c - * @return + * @param grille : Grille + * @param c : Case + * @return boolean : true si toutes les contraintes sont respectées, false sinon */ @Override public boolean estRespectee(Grille grille, Case c) { diff --git a/app/src/main/java/sudoku/Grille.java b/app/src/main/java/sudoku/Grille.java index c488e49..5ad2c8e 100644 --- a/app/src/main/java/sudoku/Grille.java +++ b/app/src/main/java/sudoku/Grille.java @@ -18,9 +18,11 @@ public class Grille { private List generatedColors; /** - * Constructeur permettant d'initialiser une griller grace aux paramètres suivants : - * @param taille - * @param sudoku + * Constructeur permettant d'initialiser une grille grace aux paramètres + * suivants : + * + * @param taille : taille de la grille + * @param sudoku : sudoku */ public Grille(int taille, Sudoku sudoku) { this.taille = taille; @@ -85,31 +87,36 @@ public class Grille { } /** - * Méthode permettant de connaitre la valeur d'une case (symbole) grace aux paramètres suivants : - * @param ligne - * @param colonne - * @return + * Méthode permettant de retourner une case en fonction de sa ligne et de sa + * colonne + * + * @param ligne : coordonnée de la ligne + * @param colonne : coordonnée de la colonne + * @return Case */ public Case getCase(int ligne, int colonne) { return cases[ligne][colonne]; } /** - * Crée un bloc personnalisé à partir des positions spécifiées. - * La couleur du bloc est choisie de façon cyclique dans la palette générée. + * Méthode permettant de créer un bloc personnalisé en fonction des positions + * passées en paramètre
+ *
* - * Exemple d'utilisation : - * sudoku.getGrille().creerBlocPersonnalise(Arrays.asList( - * new int[] { 0, 0 }, - * new int[] { 0, 1 }, - * new int[] { 0, 2 }, - * new int[] { 1, 0 }, - * new int[] { 1, 1 }, - * new int[] { 1, 2 }, - * new int[] { 2, 0 }, - * new int[] { 2, 1 }, - * new int[] { 2, 2 } - * )); + * Exemple de positions pour un sudoku 9x9 :
+ * sudoku.getGrille().creerBlocPersonnalise(Arrays.asList(
+ * new int[] { 0, 0 },
+ * new int[] { 0, 1 },
+ * new int[] { 0, 2 },
+ * new int[] { 1, 0 },
+ * new int[] { 1, 1 },
+ * new int[] { 1, 2 },
+ * new int[] { 2, 0 },
+ * new int[] { 2, 1 },
+ * new int[] { 2, 2 }
+ * ); + * + * @param positions : liste de positions pour le bloc personnalisé
*/ public void creerBlocPersonnalise(List positions) { try { @@ -290,8 +297,12 @@ public class Grille { } /** - * Méthode permettant de retourner la liste des symboles possible. Cela dépend de ce qu'a saisit l'utilisateur dans la méthode askSetSymbolesPossibles - * @return + * Méthode permettant de retourner la liste des symboles possible. + * Cela dépend de ce que saisit l'utilisateur dans la méthode + * askSetSymbolesPossibles + * + * @return List la liste des symboles possibles + * @see Symbole */ public List getSymbolesPossibles() { return symbolesPossibles; @@ -299,7 +310,8 @@ public class Grille { /** * Méthode permettant d'ajouter un symbole à la liste des symboles possibles - * @param symbolesPossibles + * + * @param symbolesPossibles : liste des symboles possibles */ public void setSymbolesPossibles(ArrayList symbolesPossibles) { this.symbolesPossibles = symbolesPossibles; @@ -318,7 +330,8 @@ public class Grille { /** * Méthode permettant de retourner la taille de la grille - * @return + * + * @return taille */ public int getTaille() { return taille; @@ -330,15 +343,15 @@ public class Grille { return bloc; } } - return null; // Ne devrait jamais arriver si la grille est bien construite + return null; // Ne dois jamais arriver si la grille est bien construite } /** * Vérifie si toutes les contraintes sont respectées. * S'arrête dès qu'une contrainte n'est pas respectée. * - * @param contraintes - * @return + * @param contraintes : liste des contraintes à vérifier + * @return true si toutes les contraintes sont respectées, false sinon */ public boolean verifierToutesContraintes(List contraintes) { // Vérifier chaque case de la grille @@ -362,8 +375,10 @@ public class Grille { } /** - * Méthode permettant de retourner la longueure du symbole le plus long pour dimensionner corectement les cases et la grille - * @return + * Méthode permettant de retourner la longueur du symbole le plus long pour + * dimensionner correctement les cases et la grille en console + * + * @return int */ public int getLongueurSymboleLePlusLong() { int max = 0; @@ -377,7 +392,8 @@ public class Grille { /** * Méthode permettant d'afficher la grille - * @return + * + * @return String : représentation de la grille */ @Override public String toString() { diff --git a/app/src/main/java/sudoku/Multidoku.java b/app/src/main/java/sudoku/Multidoku.java index 53fb203..4a9acd1 100644 --- a/app/src/main/java/sudoku/Multidoku.java +++ b/app/src/main/java/sudoku/Multidoku.java @@ -10,13 +10,23 @@ public class Multidoku { this.contraintesPartagees = new ArrayList<>(); } + /** + * Ajoute un sudoku à la grille combinée, avec un décalage spécifié par rapport à l'origine. + * @param sudoku : sudoku à ajouter + * @param offsetLigne : décalage de la ligne + * @param offsetColonne : décalage de la colonne + */ public void ajouterSudoku(Sudoku sudoku, int offsetLigne, int offsetColonne) { placements.add(new SudokuPlacement(sudoku, offsetLigne, offsetColonne)); sudoku.getGrille().setMultidoku(this); } + /** + * Ajoute une contrainte de partage entre les cases spécifiées. + * @param cases : liste de cases partagées + */ public void ajouterCasesPartagees(List cases) { - ContrainteCasePartagee contrainte = new ContrainteCasePartagee(cases, this); + ContrainteCasePartagee contrainte = new ContrainteCasePartagee(cases); contraintesPartagees.add(contrainte); // Vérifier immédiatement la validité après l'ajout @@ -26,11 +36,20 @@ public class Multidoku { } } + /** + * Résout le Multidoku en utilisant un algorithme de backtracking. + * @param afficherEtape : true pour afficher les étapes de résolution + * @return true si une solution a été trouvée, false sinon + */ public boolean resoudreMultidoku(boolean afficherEtape) { List globalCells = collecterCellulesVides(); return resoudreGlobal(globalCells, 0, afficherEtape); } + /** + * Collecte toutes les cases vides d'abord pour les cases partagées, puis pour les cases non partagées de la grille combinée. + * @return liste de cases vides + */ private List collecterCellulesVides() { List cells = new ArrayList<>(); // Ajout d'abord des cases partagées @@ -44,7 +63,7 @@ public class Multidoku { } // Ajout ensuite des cases non partagées for (SudokuPlacement sp : placements) { - Sudoku s = sp.getSudoku(); + Sudoku s = sp.sudoku(); Grille g = s.getGrille(); int taille = g.getTaille(); for (int i = 0; i < taille; i++) { @@ -59,6 +78,13 @@ public class Multidoku { return cells; } + /** + * Résout récursivement les cases vides de la grille combinée, en utilisant un algorithme de backtracking. + * @param globalCells : liste de cases vides + * @param index : index de la case actuelle + * @param afficherEtape : true pour afficher les étapes de résolution + * @return true si une solution a été trouvée, false sinon + */ private boolean resoudreGlobal(List globalCells, int index, boolean afficherEtape) { if (index == globalCells.size()) { return true; @@ -78,7 +104,7 @@ public class Multidoku { if (afficherEtape) { System.out.println("\nTentative symbole " + symbole + " sur " + gc.sudoku.getNom() + " [" + gc.ligne + "," + gc.colonne + "]"); - System.out.println(this.toStringCombined()); // Afficher l'état actuel + System.out.println(this); // Afficher l'état actuel } boolean ok; @@ -96,7 +122,7 @@ public class Multidoku { if (ok) { if (afficherEtape) { System.out.println("-> Affectation réussie pour " + symbole); - System.out.println(this.toStringCombined()); + System.out.println(this); } if (globalValide() && resoudreGlobal(globalCells, index + 1, afficherEtape)) { return true; @@ -106,18 +132,30 @@ public class Multidoku { restaurerCases(sauvegarde); if (afficherEtape) { System.out.println("Backtracking sur " + gc.sudoku.getNom() + " [" + gc.ligne + "," + gc.colonne + "]"); - System.out.println(this.toStringCombined()); + System.out.println(this); } } return false; } + /** + * Restaure les cases à leur état précédent en utilisant une sauvegarde. + * @param sauvegarde : sauvegarde des cases à restaurer + */ private void restaurerCases(Map sauvegarde) { for (Map.Entry entry : sauvegarde.entrySet()) { entry.getKey().setSymbole(entry.getValue()); } } + /** + * Affecte un symbole à une case, et propage la valeur dans les cases correspondantes des autres sudokus concernés. + * @param ligne : ligne de la case + * @param colonne : colonne de la case + * @param symbole : symbole à affecter + * @param s : sudoku actuel + * @return true si l'affectation est valide, false sinon + */ private boolean setCaseAvecPropagation(int ligne, int colonne, Symbole symbole, Sudoku s) { Grille g = s.getGrille(); Case c = g.getCase(ligne, colonne); @@ -152,16 +190,27 @@ public class Multidoku { return true; } + /** + * Trouve le sudoku auquel appartient une case donnée. + * @param c : case + * @return sudoku auquel appartient la case, ou null si non trouvé + */ private Sudoku trouverSudokuPourCase(Case c) { for (SudokuPlacement sp : placements) { - if (belongsToSudoku(c, sp.getSudoku())) { - return sp.getSudoku(); + if (appartientAuSudoku(c, sp.sudoku())) { + return sp.sudoku(); } } return null; } - private boolean belongsToSudoku(Case c, Sudoku s) { + /** + * Vérifie si une case appartient à un sudoku donné. + * @param c : case + * @param s : sudoku + * @return true si la case appartient au sudoku, false sinon + */ + private boolean appartientAuSudoku(Case c, Sudoku s) { Grille g = s.getGrille(); int taille = g.getTaille(); for (int i = 0; i < taille; i++) { @@ -174,9 +223,13 @@ public class Multidoku { return false; } + /** + * Vérifie si la grille combinée est valide. + * @return true si la grille est valide, false sinon + */ private boolean globalValide() { for (SudokuPlacement sp : placements) { - if (!sp.getSudoku().estValide()) + if (!sp.sudoku().estValide()) return false; } for (Contrainte c : contraintesPartagees) { @@ -186,11 +239,20 @@ public class Multidoku { return true; } + /** + * Vérifie si les contraintes partagées sont respectées. + * @return true si les contraintes sont respectées, false sinon + */ public boolean verifierContraintesPartagees() { return contraintesPartagees.stream() .allMatch(c -> c.estRespectee(null, null)); } + /** + * Vérifie si une case est partagée. + * @param c : case + * @return true si la case est partagée, false sinon + */ public boolean isSharedCase(Case c) { for (ContrainteCasePartagee contrainte : contraintesPartagees) { if (contrainte.getCasesLiees().contains(c)) { @@ -200,7 +262,9 @@ public class Multidoku { return false; } - // Classe utilitaire pour représenter une case vide dans un sudoku particulier + /** + * Classe interne pour le placement d'un sudoku dans la grille combinée. + */ public static class GlobalCell { public Sudoku sudoku; public int ligne; @@ -213,14 +277,18 @@ public class Multidoku { } } - // Classe interne pour la contrainte de cases partagées + /** + Classe interne pour la contrainte de cases partagées. + */ public static class ContrainteCasePartagee implements Contrainte { private final Map casesLiees; // Map associant chaque case à sa correspondante - private final Set sudokusLies; - public ContrainteCasePartagee(List cases, Multidoku multidoku) { + /** + * Constructeur de la contrainte de cases partagées. + * @param cases : liste de cases partagées + */ + public ContrainteCasePartagee(List cases) { this.casesLiees = new HashMap<>(); - this.sudokusLies = new HashSet<>(); // Les cases sont données dans l'ordre : d'abord celles du premier sudoku, // puis celles du second dans le même ordre. @@ -230,19 +298,15 @@ public class Multidoku { Case c2 = cases.get(i + size); casesLiees.put(c1, c2); casesLiees.put(c2, c1); - - Sudoku s1 = multidoku.trouverSudokuPourCase(c1); - Sudoku s2 = multidoku.trouverSudokuPourCase(c2); - if (s1 != null) - sudokusLies.add(s1); - if (s2 != null) - sudokusLies.add(s2); } // Propager les valeurs initiales propagerValeursInitiales(); } + /** + * Propage les valeurs initiales des cases partagées. + */ private void propagerValeursInitiales() { for (Map.Entry entry : casesLiees.entrySet()) { Case c1 = entry.getKey(); @@ -256,6 +320,12 @@ public class Multidoku { } } + /** + * Vérifie si la contrainte de cases partagées est respectée. + * @param grille : grille + * @param caseActuelle : case actuelle + * @return true si la contrainte est respectée, false sinon + */ @Override public boolean estRespectee(Grille grille, Case caseActuelle) { for (Map.Entry entry : casesLiees.entrySet()) { @@ -270,24 +340,38 @@ public class Multidoku { return true; } + /** + * Récupère la case correspondante à une case donnée. + * @param c : case + * @return case correspondante + */ public Case getCaseCorrespondante(Case c) { return casesLiees.get(c); } + /** + * Récupère la liste des cases partagées. + * @return liste de cases partagées + */ public Set getCasesLiees() { return casesLiees.keySet(); } } - public String toStringCombined() { + /** + * Méthode toString pour l'affichage de la grille combinée. + * @return String : représentation de la grille combinée + */ + @Override + public String toString() { // 1. Déterminer la taille globale de la grille combinée et la largeur maximale int maxLigne = 0, maxColonne = 0; int globalMaxLen = 0; for (SudokuPlacement sp : placements) { - int taille = sp.getSudoku().getGrille().getTaille(); - maxLigne = Math.max(maxLigne, sp.getOffsetLigne() + taille); - maxColonne = Math.max(maxColonne, sp.getOffsetColonne() + taille); - globalMaxLen = Math.max(globalMaxLen, sp.getSudoku().getGrille().getLongueurSymboleLePlusLong()); + int taille = sp.sudoku().getGrille().getTaille(); + maxLigne = Math.max(maxLigne, sp.offsetLigne() + taille); + maxColonne = Math.max(maxColonne, sp.offsetColonne() + taille); + globalMaxLen = Math.max(globalMaxLen, sp.sudoku().getGrille().getLongueurSymboleLePlusLong()); } // On ajoute un espace supplémentaire pour séparer les colonnes @@ -304,13 +388,13 @@ public class Multidoku { // 3. Pour chaque sudoku, placer l'affichage de chacune de ses cases dans la // grille globale for (SudokuPlacement sp : placements) { - Grille grille = sp.getSudoku().getGrille(); + Grille grille = sp.sudoku().getGrille(); int taille = grille.getTaille(); for (int i = 0; i < taille; i++) { for (int j = 0; j < taille; j++) { // Coordonnées globales calculées à partir de l'offset - int globalLigne = sp.getOffsetLigne() + i; - int globalColonne = sp.getOffsetColonne() + j; + int globalLigne = sp.offsetLigne() + i; + int globalColonne = sp.offsetColonne() + j; Case currentCase = grille.getCase(i, j); String cellStr = currentCase.toString(); diff --git a/app/src/main/java/sudoku/ResolveurBacktraceSimple.java b/app/src/main/java/sudoku/ResolveurBacktraceSimple.java index 8b56be5..b035c9e 100644 --- a/app/src/main/java/sudoku/ResolveurBacktraceSimple.java +++ b/app/src/main/java/sudoku/ResolveurBacktraceSimple.java @@ -7,12 +7,10 @@ import sudoku.core.Console; public class ResolveurBacktraceSimple implements Resolveur { /** - * Méthode permettant de résoudre un sudoku à partir des paramètres suivant :
- * - S : Sudoku
- * - afficherEtape : 0 ou 1 - * @param s - * @param afficherEtape - * @return + * Méthode permettant de résoudre un sudoku en utilisant la méthode de backtracking + * @param s : sudoku à résoudre + * @param afficherEtape : afficher les étapes de la résolution + * @return true si le sudoku est résolvable, false sinon */ @Override public boolean resoudre(Sudoku s, boolean afficherEtape) { @@ -24,6 +22,13 @@ public class ResolveurBacktraceSimple implements Resolveur { return solved; } + /** + * Méthode récursive permettant de résoudre un sudoku, utilisant la méthode de backtracking. + * @param s : sudoku à résoudre + * @param afficherEtape : afficher les étapes de la résolution + * @param etat : état de la résolution + * @return true si le sudoku est résolvable, false sinon + */ private boolean resoudre(Sudoku s, boolean afficherEtape, EtatResolution etat) { Grille g = s.getGrille(); List symboles = g.getSymbolesPossibles(); @@ -55,24 +60,26 @@ public class ResolveurBacktraceSimple implements Resolveur { /** * Méthode permettant d'afficher le sudoku à chaque étape de sa résolution - * @param s - * @param compteur - * @param compteurGeneral + * @param s : sudoku + * @param compteur : compteur de l'étape en cours + * @param compteurGeneral : compteur général de la résolution du sudoku (nombre total de tentatives) */ private void afficherEtapeResolution(Sudoku s, int compteur, int compteurGeneral) { System.out.println("Sudoku, Etape " + compteur + " (Tentative " + compteurGeneral + ")"); System.out.println(s.getGrille().toString()); } - + /** + * Classe interne permettant de stocker l'état de la résolution + */ private static class EtatResolution { int compteur; int compteurGeneral; /** * Méthode permettant de fixer l'état de la résolution - * @param compteur - * @param compteurGeneral + * @param compteur : compteur de l'étape en cours + * @param compteurGeneral : compteur général de la résolution du sudoku (nombre total de tentatives) */ EtatResolution(int compteur, int compteurGeneral) { this.compteur = compteur; diff --git a/app/src/main/java/sudoku/Sudoku.java b/app/src/main/java/sudoku/Sudoku.java index 29784aa..0c7cb91 100644 --- a/app/src/main/java/sudoku/Sudoku.java +++ b/app/src/main/java/sudoku/Sudoku.java @@ -16,13 +16,17 @@ public class Sudoku { /** * Constructeur permettant d'initialiser un sudoku à partir de la taille de sa grille - * @param taille + * @param taille : taille de la grille */ public Sudoku(int taille) { this.grille = new Grille(taille, this); this.contraintes = new ArrayList<>(); } + /** + * Méthode permettant de modifier le nom du sudoku, utilisé pour l'affichage. + * @param nom : nom du sudoku + */ public void setNom(String nom) { this.nom = nom; } @@ -31,10 +35,19 @@ public class Sudoku { return this.nom; } + /** + * Méthode permettant d'ajouter une contrainte à un sudoku + * @param contrainte : contrainte à ajouter + */ public void ajouterContrainte(Contrainte contrainte) { contraintes.add(contrainte); } + /** + * Méthode permettant de vérifier si une case est valide en fonction des contraintes la concernant + * @param c : case à vérifier + * @return boolean : true si la case est valide, false sinon + */ public boolean estValide(Case c) { for (Contrainte contrainte : contraintes) { if (!contrainte.estRespectee(grille, c)) { @@ -44,6 +57,10 @@ public class Sudoku { return true; } + /** + * Méthode permettant de vérifier si un sudoku est valide, c'est-à-dire si toutes les cases sont valides. + * @return boolean : true si le sudoku est valide, false sinon + */ public boolean estValide() { for (int i = 0; i < this.getGrille().getTaille(); i++) { for (int j = 0; j < this.getGrille().getTaille(); j++) { @@ -56,13 +73,14 @@ public class Sudoku { return true; } + public boolean verifierToutesContraintes() { return grille.verifierToutesContraintes(contraintes); } /** * Méthode permettant de retourner la grille complète - * @return + * @return Grille */ public Grille getGrille() { return grille; @@ -116,7 +134,7 @@ public class Sudoku { Multidoku multidoku = creerMultidoku(choix); if (multidoku != null) { System.out.println("\nMultidoku initial :"); - System.out.println(multidoku.toStringCombined()); + System.out.println(multidoku); System.out.println("\nDébut de la résolution dans 3 secondes..."); try { @@ -128,7 +146,7 @@ public class Sudoku { if (multidoku.resoudreMultidoku(true)) { System.out.println("\nMultidoku résolu :"); - System.out.println(multidoku.toStringCombined()); + System.out.println(multidoku); } else { System.out.println("Ce Multidoku n'a pas de solution."); } @@ -155,7 +173,7 @@ public class Sudoku { s.getGrille().setSymbolesPossibles(symboles); s.ajouterContrainte(new ContrainteLigne()); s.ajouterContrainte(new ContrainteColonne()); - s.ajouterContrainte(new ContrainteBloc()); + s.ajouterContrainte(new ContrainteBloc(s.getGrille().getTaille(), s.getGrille().getTaille())); s.getGrille().creerBlocCarre(); } @@ -287,7 +305,7 @@ public class Sudoku { for (int choixContrainte : contraintesChoisies) { switch (choixContrainte) { case 1: - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte(new ContrainteBloc(sudoku.getGrille().getTaille(), sudoku.getGrille().getTaille())); System.out.println("Contrainte Bloc ajoutée."); break; case 2: diff --git a/app/src/main/java/sudoku/SudokuPlacement.java b/app/src/main/java/sudoku/SudokuPlacement.java index 6add185..ad2a00f 100644 --- a/app/src/main/java/sudoku/SudokuPlacement.java +++ b/app/src/main/java/sudoku/SudokuPlacement.java @@ -1,25 +1,7 @@ package sudoku; -public class SudokuPlacement { - private final Sudoku sudoku; - private final int offsetLigne; - private final int offsetColonne; - - public SudokuPlacement(Sudoku sudoku, int offsetLigne, int offsetColonne) { - this.sudoku = sudoku; - this.offsetLigne = offsetLigne; - this.offsetColonne = offsetColonne; - } - - public Sudoku getSudoku() { - return sudoku; - } - - public int getOffsetLigne() { - return offsetLigne; - } - - public int getOffsetColonne() { - return offsetColonne; - } +/** + * Classe permettant de stocker un placement de symbole dans une grille de sudoku. + */ +public record SudokuPlacement(Sudoku sudoku, int offsetLigne, int offsetColonne) { } diff --git a/app/src/main/java/sudoku/Symbole.java b/app/src/main/java/sudoku/Symbole.java index 26119ca..9b1fdb1 100644 --- a/app/src/main/java/sudoku/Symbole.java +++ b/app/src/main/java/sudoku/Symbole.java @@ -5,26 +5,27 @@ public class Symbole { /** * Constructeur permettant de créer un symbole - * @param symbole + * @param symbole : symbole */ public Symbole(String symbole) { this.valeur = symbole; } + // Factory methods pour différents types de symboles + /** * Méthode permettant de créer un symbole de type String - * @param s - * @return + * @param s : symbole + * @return symbole */ - // Factory methods pour différents types public static Symbole of(String s) { return new Symbole(s); } /** * Méthode permettant de créer un symbole de type int - * @param n - * @return + * @param n : entier + * @return symbole */ public static Symbole of(int n) { return new Symbole(String.valueOf(n)); @@ -32,8 +33,8 @@ public class Symbole { /** * Méthode permettant de créer un symbole de type char - * @param c - * @return + * @param c : caractère + * @return symbole */ public static Symbole of(char c) { return new Symbole(String.valueOf(c)); @@ -41,7 +42,7 @@ public class Symbole { /** * Méthode permettant de vérifier si un symbole est de type int - * @return + * @return boolean */ public boolean isInt() { try { @@ -54,7 +55,7 @@ public class Symbole { /** * Méthode permettant de vérifier si un symbole est de type letter (char) - * @return + * @return boolean */ public boolean isLetter() { return valeur.length() == 1 && Character.isLetter(valeur.charAt(0)); @@ -62,7 +63,7 @@ public class Symbole { /** * Méthode permettant de vérifier si un symbole est de type string - * @return + * @return boolean */ @Override public String toString() { @@ -71,8 +72,8 @@ public class Symbole { /** * Méthode permettant de retourner un booléen si 2 objets sont identiques - * @param obj - * @return + * @param obj : objet + * @return boolean */ @Override public boolean equals(Object obj) { diff --git a/app/src/test/java/sudoku/AppTest.java b/app/src/test/java/sudoku/AppTest.java index e404422..886cf22 100644 --- a/app/src/test/java/sudoku/AppTest.java +++ b/app/src/test/java/sudoku/AppTest.java @@ -55,7 +55,8 @@ public class AppTest { sudoku.ajouterContrainte(new ContrainteLigne()); sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte( + new ContrainteBloc(sudoku.getGrille().getTaille() / 4, sudoku.getGrille().getTaille() / 4)); System.out.println(sudoku.getGrille().toString()); diff --git a/app/src/test/java/sudoku/TestBlocParticuliers.java b/app/src/test/java/sudoku/TestBlocParticuliers.java index 6ef1b89..37e0e65 100644 --- a/app/src/test/java/sudoku/TestBlocParticuliers.java +++ b/app/src/test/java/sudoku/TestBlocParticuliers.java @@ -7,63 +7,64 @@ import org.junit.jupiter.api.Test; public class TestBlocParticuliers { - @Test - public void blocParticuliers() { - System.out.println("TEST BLOC PARTICULIERS : "); - System.out.println(new App().getGreeting()); - // Create a new Sudoku - Sudoku sudoku = new Sudoku(4); + @Test + public void blocParticuliers() { + System.out.println("TEST BLOC PARTICULIERS : "); + System.out.println(new App().getGreeting()); + // Create a new Sudoku + Sudoku sudoku = new Sudoku(4); - sudoku.getGrille().setSymbolesPossibles(new ArrayList<>(Arrays.asList( - Symbole.of(1), - Symbole.of(2), - Symbole.of(3), - Symbole.of(4)))); + sudoku.getGrille().setSymbolesPossibles(new ArrayList<>(Arrays.asList( + Symbole.of(1), + Symbole.of(2), + Symbole.of(3), + Symbole.of(4)))); - sudoku.ajouterContrainte(new ContrainteBloc()); - sudoku.ajouterContrainte(new ContrainteLigne()); - sudoku.ajouterContrainte(new ContrainteColonne()); + sudoku.ajouterContrainte(new ContrainteBloc(sudoku.getGrille().getTaille() / 2, + sudoku.getGrille().getTaille() / 2)); + sudoku.ajouterContrainte(new ContrainteLigne()); + sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.getGrille().setCase(0, 0, Symbole.of(1)); - sudoku.getGrille().setCase(3, 1, Symbole.of(2)); - sudoku.getGrille().setCase(2, 2, Symbole.of(3)); + sudoku.getGrille().setCase(0, 0, Symbole.of(1)); + sudoku.getGrille().setCase(3, 1, Symbole.of(2)); + sudoku.getGrille().setCase(2, 2, Symbole.of(3)); - sudoku.getGrille().creerBlocPersonnalise(Arrays.asList( - new int[] { 0, 0 }, - new int[] { 3, 3 }, - new int[] { 0, 1 }, - new int[] { 2, 3 })); - sudoku.getGrille().creerBlocPersonnalise(Arrays.asList( - new int[] { 0, 2 }, - new int[] { 1, 3 }, - new int[] { 1, 2 }, - new int[] { 3, 1 })); - sudoku.getGrille().creerBlocPersonnalise(Arrays.asList( - new int[] { 1, 1 }, - new int[] { 1, 0 }, - new int[] { 0, 3 }, - new int[] { 3, 0 })); - sudoku.getGrille().creerBlocPersonnalise(Arrays.asList( - new int[] { 2, 0 }, - new int[] { 2, 1 }, - new int[] { 2, 2 }, - new int[] { 3, 2 })); + sudoku.getGrille().creerBlocPersonnalise(Arrays.asList( + new int[] { 0, 0 }, + new int[] { 3, 3 }, + new int[] { 0, 1 }, + new int[] { 2, 3 })); + sudoku.getGrille().creerBlocPersonnalise(Arrays.asList( + new int[] { 0, 2 }, + new int[] { 1, 3 }, + new int[] { 1, 2 }, + new int[] { 3, 1 })); + sudoku.getGrille().creerBlocPersonnalise(Arrays.asList( + new int[] { 1, 1 }, + new int[] { 1, 0 }, + new int[] { 0, 3 }, + new int[] { 3, 0 })); + sudoku.getGrille().creerBlocPersonnalise(Arrays.asList( + new int[] { 2, 0 }, + new int[] { 2, 1 }, + new int[] { 2, 2 }, + new int[] { 3, 2 })); - System.out.println("Sudoku :"); - System.out.println(sudoku.getGrille().toString()); + System.out.println("Sudoku :"); + System.out.println(sudoku.getGrille().toString()); - System.out.println("Blocs :"); - sudoku.getGrille().printBlocs(); + System.out.println("Blocs :"); + sudoku.getGrille().printBlocs(); - System.out.println("Symboles possibles :"); - sudoku.getGrille().printSymbolesPossibles(); + System.out.println("Symboles possibles :"); + sudoku.getGrille().printSymbolesPossibles(); - ResolveurBacktraceSimple resolveur = new ResolveurBacktraceSimple(); - resolveur.resoudre(sudoku, true); + ResolveurBacktraceSimple resolveur = new ResolveurBacktraceSimple(); + resolveur.resoudre(sudoku, true); - System.out.println("Sudoku résolu :"); - System.out.println(sudoku.getGrille().toString()); + System.out.println("Sudoku résolu :"); + System.out.println(sudoku.getGrille().toString()); - System.out.println("FIN TEST BLOC PARTICULIERS"); - } + System.out.println("FIN TEST BLOC PARTICULIERS"); + } } diff --git a/app/src/test/java/sudoku/TestBlocRectangle.java b/app/src/test/java/sudoku/TestBlocRectangle.java index d756ce5..904aa7e 100644 --- a/app/src/test/java/sudoku/TestBlocRectangle.java +++ b/app/src/test/java/sudoku/TestBlocRectangle.java @@ -20,7 +20,8 @@ public class TestBlocRectangle { sudoku.ajouterContrainte(new ContrainteLigne()); sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte( + new ContrainteBloc(sudoku.getGrille().getTaille() / 5, sudoku.getGrille().getTaille() / 3)); sudoku.getGrille().setCase(0, 0, Symbole.of(1)); sudoku.getGrille().setCase(6, 1, Symbole.of(2)); @@ -35,7 +36,7 @@ public class TestBlocRectangle { sudoku.getGrille().setCase(3, 0, Symbole.of(4)); sudoku.getGrille().creerBlocRectangulaire(3, 5); - + System.out.println("Sudoku :"); System.out.println(sudoku.getGrille().toString()); diff --git a/app/src/test/java/sudoku/TestCreationGrilleRectangulaireSansSolution.java b/app/src/test/java/sudoku/TestCreationGrilleRectangulaireSansSolution.java index 028118f..93eac63 100644 --- a/app/src/test/java/sudoku/TestCreationGrilleRectangulaireSansSolution.java +++ b/app/src/test/java/sudoku/TestCreationGrilleRectangulaireSansSolution.java @@ -88,7 +88,8 @@ public class TestCreationGrilleRectangulaireSansSolution { sudoku.getGrille().creerBlocRectangulaire(3, 4); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte( + new ContrainteBloc(sudoku.getGrille().getTaille() / 4, sudoku.getGrille().getTaille() / 3)); sudoku.ajouterContrainte(new ContrainteColonne()); sudoku.ajouterContrainte(new ContrainteLigne()); diff --git a/app/src/test/java/sudoku/TestDoublonBloc.java b/app/src/test/java/sudoku/TestDoublonBloc.java index cd3b22d..39e8d5c 100644 --- a/app/src/test/java/sudoku/TestDoublonBloc.java +++ b/app/src/test/java/sudoku/TestDoublonBloc.java @@ -26,7 +26,7 @@ public class TestDoublonBloc { Symbole.of(9)))); // Add constraints - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte(new ContrainteBloc(sudoku.getGrille().getTaille() / 3, sudoku.getGrille().getTaille() / 3)); sudoku.getGrille().setCase(0, 0, Symbole.of(1)); sudoku.getGrille().setCase(6, 1, Symbole.of(2)); diff --git a/app/src/test/java/sudoku/TestMultidokuBloc.java b/app/src/test/java/sudoku/TestMultidokuBloc.java index f1d110f..1f6c29a 100644 --- a/app/src/test/java/sudoku/TestMultidokuBloc.java +++ b/app/src/test/java/sudoku/TestMultidokuBloc.java @@ -35,7 +35,7 @@ public class TestMultidokuBloc { sudoku.getGrille().setSymbolesPossibles(symboles); sudoku.ajouterContrainte(new ContrainteLigne()); sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte(new ContrainteBloc(sudoku.getGrille().getTaille() / 3, sudoku.getGrille().getTaille() / 3)); sudoku.getGrille().creerBlocCarre(); } @@ -73,11 +73,11 @@ public class TestMultidokuBloc { System.out.println(s2.getGrille().toString()); System.out.println("\nAffichage Multidoku combiné :"); - System.out.println(multidoku.toStringCombined()); + System.out.println(multidoku.toString()); if (multidoku.resoudreMultidoku(false)) { System.out.println("Multidoku résolu :"); - System.out.println(multidoku.toStringCombined()); + System.out.println(multidoku.toString()); } else { System.out.println("Multidoku non résolu"); } diff --git a/app/src/test/java/sudoku/TestMultidokuCase.java b/app/src/test/java/sudoku/TestMultidokuCase.java index fe23122..dbe883d 100644 --- a/app/src/test/java/sudoku/TestMultidokuCase.java +++ b/app/src/test/java/sudoku/TestMultidokuCase.java @@ -40,7 +40,7 @@ public class TestMultidokuCase { sudoku.getGrille().setSymbolesPossibles(symboles); sudoku.ajouterContrainte(new ContrainteLigne()); sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte(new ContrainteBloc(sudoku.getGrille().getTaille() / 3, sudoku.getGrille().getTaille() / 3)); sudoku.getGrille().creerBlocCarre(); } @@ -55,11 +55,11 @@ public class TestMultidokuCase { System.out.println(s2.getGrille().toString()); System.out.println("\nAffichage Multidoku combiné :"); - System.out.println(multidoku.toStringCombined()); + System.out.println(multidoku.toString()); if (multidoku.resoudreMultidoku(false)) { System.out.println("Multidoku résolu !"); - System.out.println(multidoku.toStringCombined()); + System.out.println(multidoku.toString()); } else { System.out.println("Échec de la résolution du multidoku."); } diff --git a/app/src/test/java/sudoku/TestMultidokuColonne.java b/app/src/test/java/sudoku/TestMultidokuColonne.java index 76ce616..e5295e2 100644 --- a/app/src/test/java/sudoku/TestMultidokuColonne.java +++ b/app/src/test/java/sudoku/TestMultidokuColonne.java @@ -32,7 +32,7 @@ public class TestMultidokuColonne { sudoku.getGrille().setSymbolesPossibles(symboles); sudoku.ajouterContrainte(new ContrainteLigne()); sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte(new ContrainteBloc(sudoku.getGrille().getTaille() / 3, sudoku.getGrille().getTaille() / 3)); sudoku.getGrille().creerBlocCarre(); } @@ -68,11 +68,11 @@ public class TestMultidokuColonne { System.out.println(s2.getGrille().toString()); System.out.println("\nAffichage Multidoku combiné :"); - System.out.println(multidoku.toStringCombined()); + System.out.println(multidoku.toString()); if (multidoku.resoudreMultidoku(false)) { System.out.println("Multidoku résolu :"); - System.out.println(multidoku.toStringCombined()); + System.out.println(multidoku.toString()); } else { System.out.println("Multidoku non résolu"); } diff --git a/app/src/test/java/sudoku/TestMultidokuLigne.java b/app/src/test/java/sudoku/TestMultidokuLigne.java index 0f8cd90..cc21fd8 100644 --- a/app/src/test/java/sudoku/TestMultidokuLigne.java +++ b/app/src/test/java/sudoku/TestMultidokuLigne.java @@ -32,7 +32,7 @@ public class TestMultidokuLigne { sudoku.getGrille().setSymbolesPossibles(symboles); sudoku.ajouterContrainte(new ContrainteLigne()); sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte(new ContrainteBloc(sudoku.getGrille().getTaille() / 3, sudoku.getGrille().getTaille() / 3)); sudoku.getGrille().creerBlocCarre(); } @@ -68,11 +68,11 @@ public class TestMultidokuLigne { System.out.println(s2.getGrille().toString()); System.out.println("\nAffichage Multidoku combiné :"); - System.out.println(multidoku.toStringCombined()); + System.out.println(multidoku.toString()); if (multidoku.resoudreMultidoku(false)) { System.out.println("Multidoku résolu :"); - System.out.println(multidoku.toStringCombined()); + System.out.println(multidoku.toString()); } else { System.out.println("Multidoku non résolu"); } diff --git a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku16.java b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku16.java index 2add776..7c17fba 100644 --- a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku16.java +++ b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku16.java @@ -34,7 +34,7 @@ public class TestResolveurBacktraceSimpleSudoku16 { sudoku.ajouterContrainte(new ContrainteLigne()); sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte(new ContrainteBloc(sudoku.getGrille().getTaille() / 4, sudoku.getGrille().getTaille() / 4)); sudoku.getGrille().setCase(0, 0, Symbole.of(1)); sudoku.getGrille().setCase(6, 1, Symbole.of(2)); diff --git a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku25.java b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku25.java index ec57cd9..b0f085a 100644 --- a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku25.java +++ b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku25.java @@ -26,7 +26,7 @@ // sudoku.ajouterContrainte(new ContrainteLigne()); // sudoku.ajouterContrainte(new ContrainteColonne()); -// sudoku.ajouterContrainte(new ContrainteBloc()); +// sudoku.ajouterContrainte(new ContrainteBloc(sudoku.getGrille().getTaille() / 5, sudoku.getGrille().getTaille() / 5)); // sudoku.getGrille().setCase(0, 0, Symbole.of(1)); // sudoku.getGrille().setCase(6, 1, Symbole.of(2)); diff --git a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java index f8e0cba..f8b02d3 100644 --- a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java +++ b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java @@ -25,7 +25,7 @@ public class TestResolveurBacktraceSimpleSudoku9 { sudoku.ajouterContrainte(new ContrainteLigne()); sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte(new ContrainteBloc(sudoku.getGrille().getTaille() / 3, sudoku.getGrille().getTaille() / 3)); sudoku.getGrille().setCase(0, 0, Symbole.of(1)); sudoku.getGrille().setCase(6, 1, Symbole.of(2)); diff --git a/app/src/test/java/sudoku/TestSudokuEmojis.java b/app/src/test/java/sudoku/TestSudokuEmojis.java index 72af9bf..b26597d 100644 --- a/app/src/test/java/sudoku/TestSudokuEmojis.java +++ b/app/src/test/java/sudoku/TestSudokuEmojis.java @@ -28,7 +28,8 @@ public class TestSudokuEmojis { sudoku.ajouterContrainte(new ContrainteLigne()); sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte( + new ContrainteBloc(sudoku.getGrille().getTaille() / 3, sudoku.getGrille().getTaille() / 3)); sudoku.getGrille().setCase(0, 0, Symbole.of("😎")); sudoku.getGrille().setCase(6, 1, Symbole.of("😂")); diff --git a/app/src/test/java/sudoku/TestSudokuLettres.java b/app/src/test/java/sudoku/TestSudokuLettres.java index 144d8af..3e440e9 100644 --- a/app/src/test/java/sudoku/TestSudokuLettres.java +++ b/app/src/test/java/sudoku/TestSudokuLettres.java @@ -28,7 +28,8 @@ public class TestSudokuLettres { sudoku.ajouterContrainte(new ContrainteLigne()); sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte( + new ContrainteBloc(sudoku.getGrille().getTaille() / 3, sudoku.getGrille().getTaille() / 3)); sudoku.getGrille().setCase(0, 0, Symbole.of("L")); sudoku.getGrille().setCase(6, 1, Symbole.of("E")); diff --git a/app/src/test/java/sudoku/TestSudokusString.java b/app/src/test/java/sudoku/TestSudokusString.java index 0488ce8..6f73c83 100644 --- a/app/src/test/java/sudoku/TestSudokusString.java +++ b/app/src/test/java/sudoku/TestSudokusString.java @@ -29,7 +29,8 @@ public class TestSudokusString { sudoku.ajouterContrainte(new ContrainteLigne()); sudoku.ajouterContrainte(new ContrainteColonne()); - sudoku.ajouterContrainte(new ContrainteBloc()); + sudoku.ajouterContrainte( + new ContrainteBloc(sudoku.getGrille().getTaille() / 3, sudoku.getGrille().getTaille() / 3)); sudoku.getGrille().setCase(0, 0, Symbole.of("Sudoku")); sudoku.getGrille().setCase(6, 1, Symbole.of("String"));