Files
Sudoku/app/src/main/java/sudoku/SudokuFactory.java
Persson-dev 3a69139798
All checks were successful
Linux arm64 / Build (push) Successful in 52s
fix build
2025-01-21 19:28:53 +01:00

63 lines
1.9 KiB
Java

package sudoku;
import sudoku.constraint.BlockConstraint;
import sudoku.constraint.ColumnConstraint;
import sudoku.constraint.IConstraint;
import sudoku.constraint.LineConstraint;
import java.util.ArrayList;
import java.util.List;
public class SudokuFactory {
private static List<Cell> initCells(int size) {
List<Cell> cells = new ArrayList<>(size * size);
for (int i = 0; i < size * size; i++) {
cells.add(new MutableCell());
}
return cells;
}
private static List<Block> initRectangleBlocs(List<Cell> cells, int width, int height) {
List<Block> blocs = new ArrayList<>();
int size = width * height;
for (int i = 0; i < size; i++) {
Block newBlock = new Block();
int blockX = i % height;
int blockY = i / height;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
int index = ((y + blockY * height) * size + (x + blockX * width));
Cell blockCell = cells.get(index);
blockCell.setBlock(newBlock);
// List<Block> blockContainers = new ArrayList<>();
// blockContainers.add(newBlock);
// blockCell.setBlockContainers(blockContainers);
newBlock.addCell(blockCell);
}
}
blocs.add(newBlock);
}
return blocs;
}
public static MultiDoku createBasicEmptyRectangleSudoku(int widthBlock, int heightBlock) {
int symbolCount = widthBlock * heightBlock;
List<Cell> cases = initCells(symbolCount);
List<Block> blocs = initRectangleBlocs(cases, widthBlock, heightBlock);
List<IConstraint> constraints = new ArrayList<>();
constraints.add(new ColumnConstraint());
constraints.add(new LineConstraint());
constraints.add(new BlockConstraint());
Sudoku s = new Sudoku(cases, blocs, constraints);
List<Sudoku> subSudoku = new ArrayList<>();
subSudoku.add(s);
return new MultiDoku(subSudoku);
}
public static MultiDoku createBasicEmptySquareSudoku(int size) {
return createBasicEmptyRectangleSudoku(size, size);
}
}