whoa
Some checks failed
Linux arm64 / Build (push) Failing after 23s

This commit is contained in:
Janet-Doe
2025-01-10 17:04:58 +01:00
parent d849f3afc4
commit e2c8253f4a
4 changed files with 97 additions and 3 deletions

View File

@@ -1,5 +1,8 @@
package sudoku; package sudoku;
import sudoku.constraint.IConstraint;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@@ -9,10 +12,34 @@ import java.util.List;
*/ */
public class MultiDoku { public class MultiDoku {
private final List<Sudoku> sousGrilles; private final List<Sudoku> subGrids;
public MultiDoku(List<Sudoku> sousGrilles) { public MultiDoku(List<Sudoku> subGrids) {
this.sousGrilles = sousGrilles; this.subGrids = subGrids;
}
public int getNbSubGrids(){
return subGrids.size();
}
public Sudoku getSubGrid(int i){
return subGrids.get(i);
}
public boolean isValid(List<IConstraint> constraints){
for (Sudoku sudoku : subGrids){
if (!sudoku.isValid(constraints))
return false;
}
return true;
}
public List<MutableCell> getMutableCells(){
List<MutableCell> mutableCells = new ArrayList<>();
for (Sudoku sudoku : subGrids){
mutableCells.addAll(sudoku.getMutableCells());
}
return mutableCells;
} }
} }

View File

@@ -25,6 +25,11 @@ public class MutableCell extends Cell{
setSymboleIndex(NOSYMBOLE); setSymboleIndex(NOSYMBOLE);
} }
public void clear(int indexSymbol) {
hintsSymbolIndex.remove(indexSymbol);
this.clear();
}
public List<Integer> getHints() { public List<Integer> getHints() {
return this.hintsSymbolIndex; return this.hintsSymbolIndex;
} }

View File

@@ -1,5 +1,9 @@
package sudoku; package sudoku;
import sudoku.constraint.IConstraint;
import javax.swing.*;
import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
@@ -22,8 +26,27 @@ public class Sudoku {
return this.cells.get(index); return this.cells.get(index);
} }
public Cell getCell(int i) {
return this.cells.get(i);
}
public int getSize() { public int getSize() {
return this.blocks.size(); return this.blocks.size();
} }
public Boolean isValid(List<IConstraint> constraints) {
//not implemented
//for eachcase check contraintes
throw new Error("Function isValid() not implemented");
}
public List<MutableCell> getMutableCells() {
List<MutableCell> mutableCells = new ArrayList<>();
for (Cell cell : this.cells) {
if (cell instanceof MutableCell){
mutableCells.add((MutableCell) cell);
}
}
return mutableCells;
}
} }

View File

@@ -0,0 +1,39 @@
package sudoku.solver;
import sudoku.Cell;
import sudoku.MultiDoku;
import sudoku.MutableCell;
import sudoku.Sudoku;
import sudoku.constraint.IConstraint;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Solver {
Caretaker stack;
public Solver() {
}
public MultiDoku solve(MultiDoku doku, List<IConstraint> constraints) throws Exception {
if (!doku.isValid(constraints)) {
throw new Exception("Invalid doku");
}
List<MutableCell> allMutableCells = doku.getMutableCells();
List<MutableCell> remainingCellsToCheck = new ArrayList<>(allMutableCells);
Random rand = new Random();
while (!remainingCellsToCheck.isEmpty()) {
int indexCurrentCell = rand.nextInt(remainingCellsToCheck.size());
MutableCell currentCell = remainingCellsToCheck.get(indexCurrentCell);
if (currentCell.getHints().isEmpty()){
MutableCell modify = allMutableCells.get(stack.undo());
modify.clear(modify.getSymboleIndex());
}
remainingCellsToCheck.remove(indexCurrentCell);
}
return doku;
}
}