refactor: update ContrainteBloc to handle rectangle bloc, update tests, and improve code comments

This commit is contained in:
2025-02-09 11:47:02 +01:00
parent ea868017ee
commit 86fe45c358
27 changed files with 356 additions and 251 deletions

View File

@@ -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: