From e2c8253f4a18d198c68b7cd13644ae54d509e03c Mon Sep 17 00:00:00 2001 From: Janet-Doe Date: Fri, 10 Jan 2025 17:04:58 +0100 Subject: [PATCH] whoa --- app/src/main/java/sudoku/MultiDoku.java | 33 +++++++++++++++-- app/src/main/java/sudoku/MutableCell.java | 5 +++ app/src/main/java/sudoku/Sudoku.java | 23 ++++++++++++ app/src/main/java/sudoku/solver/Solver.java | 39 +++++++++++++++++++++ 4 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/sudoku/solver/Solver.java diff --git a/app/src/main/java/sudoku/MultiDoku.java b/app/src/main/java/sudoku/MultiDoku.java index ac64057..1e3a4e5 100644 --- a/app/src/main/java/sudoku/MultiDoku.java +++ b/app/src/main/java/sudoku/MultiDoku.java @@ -1,5 +1,8 @@ package sudoku; +import sudoku.constraint.IConstraint; + +import java.util.ArrayList; import java.util.List; /** @@ -9,10 +12,34 @@ import java.util.List; */ public class MultiDoku { - private final List sousGrilles; + private final List subGrids; - public MultiDoku(List sousGrilles) { - this.sousGrilles = sousGrilles; + public MultiDoku(List subGrids) { + this.subGrids = subGrids; + } + + public int getNbSubGrids(){ + return subGrids.size(); + } + + public Sudoku getSubGrid(int i){ + return subGrids.get(i); + } + + public boolean isValid(List constraints){ + for (Sudoku sudoku : subGrids){ + if (!sudoku.isValid(constraints)) + return false; + } + return true; + } + + public List getMutableCells(){ + List mutableCells = new ArrayList<>(); + for (Sudoku sudoku : subGrids){ + mutableCells.addAll(sudoku.getMutableCells()); + } + return mutableCells; } } diff --git a/app/src/main/java/sudoku/MutableCell.java b/app/src/main/java/sudoku/MutableCell.java index b6f88ae..ab99658 100644 --- a/app/src/main/java/sudoku/MutableCell.java +++ b/app/src/main/java/sudoku/MutableCell.java @@ -25,6 +25,11 @@ public class MutableCell extends Cell{ setSymboleIndex(NOSYMBOLE); } + public void clear(int indexSymbol) { + hintsSymbolIndex.remove(indexSymbol); + this.clear(); + } + public List getHints() { return this.hintsSymbolIndex; } diff --git a/app/src/main/java/sudoku/Sudoku.java b/app/src/main/java/sudoku/Sudoku.java index 3e0fded..3b60963 100644 --- a/app/src/main/java/sudoku/Sudoku.java +++ b/app/src/main/java/sudoku/Sudoku.java @@ -1,5 +1,9 @@ package sudoku; +import sudoku.constraint.IConstraint; + +import javax.swing.*; +import java.util.ArrayList; import java.util.List; /** @@ -22,8 +26,27 @@ public class Sudoku { return this.cells.get(index); } + public Cell getCell(int i) { + return this.cells.get(i); + } + public int getSize() { return this.blocks.size(); } + public Boolean isValid(List constraints) { + //not implemented + //for eachcase check contraintes + throw new Error("Function isValid() not implemented"); + } + + public List getMutableCells() { + List mutableCells = new ArrayList<>(); + for (Cell cell : this.cells) { + if (cell instanceof MutableCell){ + mutableCells.add((MutableCell) cell); + } + } + return mutableCells; + } } diff --git a/app/src/main/java/sudoku/solver/Solver.java b/app/src/main/java/sudoku/solver/Solver.java new file mode 100644 index 0000000..9f4376f --- /dev/null +++ b/app/src/main/java/sudoku/solver/Solver.java @@ -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 constraints) throws Exception { + if (!doku.isValid(constraints)) { + throw new Exception("Invalid doku"); + } + List allMutableCells = doku.getMutableCells(); + List 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; + } +}