This commit is contained in:
102
app/src/main/java/sudoku/structure/MultiDoku.java
Normal file
102
app/src/main/java/sudoku/structure/MultiDoku.java
Normal file
@@ -0,0 +1,102 @@
|
||||
package sudoku.structure;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @class MultiDoku
|
||||
* @brief Représente une grille de Multidoku.
|
||||
* Une grille de sudoku est un multidoku avec un seul sous-sudoku
|
||||
*/
|
||||
public class MultiDoku {
|
||||
|
||||
private final List<Sudoku> subGrids;
|
||||
|
||||
public MultiDoku(List<Sudoku> subGrids) {
|
||||
this.subGrids = subGrids;
|
||||
}
|
||||
|
||||
public int getNbSubGrids(){
|
||||
return subGrids.size();
|
||||
}
|
||||
|
||||
public Sudoku getSubGrid(int i){
|
||||
return subGrids.get(i);
|
||||
}
|
||||
|
||||
public List<Cell> getCells(){
|
||||
List<Cell> cells = new ArrayList<>();
|
||||
for (Sudoku sudoku : subGrids){
|
||||
cells.addAll(sudoku.getCells());
|
||||
}
|
||||
return cells;
|
||||
}
|
||||
|
||||
public void updateSymbolsPossibilities() throws Exception {
|
||||
for (Sudoku sudoku : subGrids){
|
||||
sudoku.updateSymbolsPossibilities();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("Multidoku {");
|
||||
for (Sudoku sudoku : subGrids){
|
||||
sb.append("\n\t").append(sudoku.toString());
|
||||
}
|
||||
sb.append("\n}");
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public Cell getFirstEmptyCell() {
|
||||
for (Sudoku sudoku : this.subGrids) {
|
||||
Cell cellTmp = sudoku.getFirstEmptyCell();
|
||||
if (cellTmp != null && cellTmp.isEmpty()) {
|
||||
return cellTmp;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public List<Integer> getPossibleSymbolsOfCell(Cell cellToFill) {
|
||||
for (Sudoku sudoku : this.subGrids) {
|
||||
if (sudoku.contains(cellToFill)) {
|
||||
return sudoku.getPossibleSymbolsOfCell(cellToFill);
|
||||
}
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
public List<Sudoku> getSubGrids() {
|
||||
return this.subGrids;
|
||||
}
|
||||
|
||||
public boolean isValid() {
|
||||
boolean result = true;
|
||||
for (Sudoku sudoku : this.subGrids) {
|
||||
result = sudoku.isValid() && result;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
if (!(object instanceof MultiDoku)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (this.getNbSubGrids() != ((MultiDoku) object).getNbSubGrids()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 0; i < this.getNbSubGrids(); i++) {
|
||||
if (!this.getSubGrid(i).equals(((MultiDoku) object).getSubGrid(i))) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user