feat: implement multidoku resolution with shared constraints (without case propagation)
This commit is contained in:
91
app/src/test/java/sudoku/TestMultidokuBloc.java
Normal file
91
app/src/test/java/sudoku/TestMultidokuBloc.java
Normal file
@@ -0,0 +1,91 @@
|
||||
package sudoku;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class TestMultidokuBloc {
|
||||
|
||||
@Test
|
||||
public void testMultidokuBloc() {
|
||||
Multidoku multidoku = new Multidoku();
|
||||
Sudoku s1 = new Sudoku(9);
|
||||
Sudoku s2 = new Sudoku(9);
|
||||
|
||||
// Placer sudoku1 en haut à gauche (offset (0,0))
|
||||
multidoku.ajouterSudoku(s1, 0, 0);
|
||||
|
||||
// Placer sudoku2 de façon à ce que sa case (0,0) se retrouve en (6,6) de la
|
||||
// grille globale
|
||||
multidoku.ajouterSudoku(s2, 6, 6);
|
||||
|
||||
// Créer un lien entre la case (6,6) de s1 et (0,0) de s2
|
||||
List<Case> casesPartagees = Arrays.asList(
|
||||
s1.getGrille().getCase(6, 6),
|
||||
s1.getGrille().getCase(6, 7),
|
||||
s1.getGrille().getCase(6, 8),
|
||||
s1.getGrille().getCase(7, 6),
|
||||
s1.getGrille().getCase(7, 7),
|
||||
s1.getGrille().getCase(7, 8),
|
||||
s1.getGrille().getCase(8, 6),
|
||||
s1.getGrille().getCase(8, 7),
|
||||
s1.getGrille().getCase(8, 8),
|
||||
|
||||
s2.getGrille().getCase(0, 0),
|
||||
s2.getGrille().getCase(0, 1),
|
||||
s2.getGrille().getCase(0, 2),
|
||||
s2.getGrille().getCase(1, 0),
|
||||
s2.getGrille().getCase(1, 1),
|
||||
s2.getGrille().getCase(1, 2),
|
||||
s2.getGrille().getCase(2, 0),
|
||||
s2.getGrille().getCase(2, 1),
|
||||
s2.getGrille().getCase(2, 2));
|
||||
multidoku.ajouterCasesPartagees(casesPartagees);
|
||||
|
||||
multidoku.ajouterContraintePartagee(new ContrainteCasePartagee(casesPartagees));
|
||||
|
||||
ArrayList<Symbole> symboles = new ArrayList<>();
|
||||
for (int i = 10; i <= 19; i++) {
|
||||
symboles.add(Symbole.of(i));
|
||||
}
|
||||
|
||||
s1.getGrille().setSymbolesPossibles(symboles);
|
||||
List<Sudoku> sudokus = Arrays.asList(s1, s2);
|
||||
for (Sudoku sudoku : sudokus) {
|
||||
sudoku.getGrille().setSymbolesPossibles(symboles);
|
||||
sudoku.ajouterContrainte(new ContrainteLigne());
|
||||
sudoku.ajouterContrainte(new ContrainteColonne());
|
||||
sudoku.ajouterContrainte(new ContrainteBloc());
|
||||
sudoku.getGrille().creerBlocCarre();
|
||||
|
||||
}
|
||||
|
||||
for (int i = 0; i < s1.getGrille().getTaille(); i++) {
|
||||
s1.getGrille().setCase(i, i, symboles.get(i));
|
||||
}
|
||||
|
||||
System.out.println("Sudoku 1 :");
|
||||
System.out.println(s1.getGrille().toString());
|
||||
|
||||
System.out.println("Sudoku 2 :");
|
||||
System.out.println(s2.getGrille().toString());
|
||||
|
||||
System.out.println("\nAffichage Multidoku combiné :");
|
||||
System.out.println(multidoku.toStringCombined());
|
||||
|
||||
if (multidoku.resoudreMultidoku(false)) {
|
||||
System.out.println("Multidoku résolu :");
|
||||
System.out.println(multidoku.toStringCombined());
|
||||
} else {
|
||||
System.out.println("Multidoku non résolu");
|
||||
}
|
||||
|
||||
System.out.println("Sudoku 1 résolu :");
|
||||
System.out.println(s1.getGrille().toString());
|
||||
|
||||
System.out.println("Sudoku 2 résolu :");
|
||||
System.out.println(s2.getGrille().toString());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user