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

@@ -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());

View File

@@ -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");
}
}

View File

@@ -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());

View File

@@ -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());

View File

@@ -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));

View File

@@ -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");
}

View File

@@ -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.");
}

View File

@@ -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");
}

View File

@@ -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");
}

View File

@@ -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));

View File

@@ -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));

View File

@@ -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));

View File

@@ -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("😂"));

View File

@@ -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"));

View File

@@ -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"));