feat: implement constraint classes for Sudoku (row, column, block)

This commit is contained in:
2025-01-05 11:13:19 +01:00
parent 8945072074
commit d8486a3bd7
4 changed files with 67 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
package sudoku;
public interface Contrainte {
boolean estRespectee(Grille grille, Case c);
}

View File

@@ -0,0 +1,24 @@
package sudoku;
import sudoku.core.Console;
public class ContrainteBloc implements Contrainte {
@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;
Symbole symbole = c.getSymbole();
for (int i = 0; i < blocSize; i++) {
for (int j = 0; j < blocSize; j++) {
Case currentCase = grille.getCase(startRow + i, startCol + j);
if (currentCase != c && currentCase.getSymbole() != null && currentCase.getSymbole().equals(symbole)) {
Console.errorln("La contrainte de bloc n'est pas respectee: ligne=" + (startRow + i) + ", col=" + (startCol + j) + ", symbole=" + symbole);
return false;
}
}
}
return true;
}
}

View File

@@ -0,0 +1,19 @@
package sudoku;
import sudoku.core.Console;
public class ContrainteColonne implements Contrainte {
@Override
public boolean estRespectee(Grille grille, Case c) {
int colonne = c.getColonne();
Symbole symbole = c.getSymbole();
for (int ligne = 0; ligne < grille.getTaille(); ligne++) {
Case currentCase = grille.getCase(ligne, colonne);
if (currentCase != c && currentCase.getSymbole() != null && currentCase.getSymbole().equals(symbole)) {
Console.errorln("La contrainte de colonne n'est pas respectee: ligne=" + ligne + ", col=" + colonne + ", symbole=" + symbole);
return false;
}
}
return true;
}
}

View File

@@ -0,0 +1,19 @@
package sudoku;
import sudoku.core.Console;
public class ContrainteLigne implements Contrainte {
@Override
public boolean estRespectee(Grille grille, Case c) {
int ligne = c.getLigne();
Symbole symbole = c.getSymbole();
for (int col = 0; col < grille.getTaille(); col++) {
Case currentCase = grille.getCase(ligne, col);
if (currentCase != c && currentCase.getSymbole() != null && currentCase.getSymbole().equals(symbole)) {
Console.errorln("La contrainte de ligne n'est pas respectee: ligne=" + ligne + ", col=" + col + ", symbole=" + symbole);
return false;
}
}
return true;
}
}