refactor stupidsolver

This commit is contained in:
2025-02-02 14:43:09 +01:00
parent d5009371f2
commit 618e436270

View File

@@ -1,5 +1,6 @@
package sudoku.solver;
import java.util.List;
import java.util.concurrent.CancellationException;
import sudoku.structure.MultiDoku;
@@ -8,9 +9,9 @@ import sudoku.structure.Sudoku;
/**
* Class de test non utilisé
*/
public class StupidSolver {
public class StupidSolver implements Solver{
private static boolean solve(Sudoku sudoku, int index) {
private boolean solve(Sudoku sudoku, int index, List<SolverStep> steps) {
// mécanisme d'abandon
if (Thread.interrupted())
throw new CancellationException("User wants to stop the solver");
@@ -21,27 +22,30 @@ public class StupidSolver {
// si la case n'est pas modifiable, on passe à la suivante
if (!sudoku.getCell(index).isMutable())
return solve(sudoku, index + 1);
return solve(sudoku, index + 1, steps);
for (int symbol = 0; symbol < sudoku.getSize(); symbol++) {
if (sudoku.getCell(index).trySetValue(symbol)) {
addStep(sudoku.getCell(index), steps);
// on tente de placer sur la case suivante
if (solve(sudoku, index + 1)) {
if (solve(sudoku, index + 1, steps)) {
return true;
}
}
}
// on a tout essayé et rien n'a fonctionné
sudoku.getCell(index).empty();
addStep(sudoku.getCell(index), steps);
return false;
}
public static boolean solve(MultiDoku doku) {
@Override
public boolean solve(MultiDoku doku, List<SolverStep> steps) {
if (doku.isSolved())
return true;
for (Sudoku sudoku : doku.getSubGrids()) {
if (!solve(sudoku, 0))
if (!solve(sudoku, 0, steps))
return false;
}
return true;