diff --git a/app/src/main/java/sudoku/io/SudokuPrinter.java b/app/src/main/java/sudoku/io/SudokuPrinter.java index 6c35e99..6f6dee4 100644 --- a/app/src/main/java/sudoku/io/SudokuPrinter.java +++ b/app/src/main/java/sudoku/io/SudokuPrinter.java @@ -1,13 +1,13 @@ package sudoku.io; +import java.util.List; + import gui.RenderableMultidoku; import gui.constants.Symbols; import sudoku.structure.Cell; import sudoku.structure.MultiDoku; import sudoku.structure.Sudoku; -import java.util.List; - public class SudokuPrinter { public static final String ANSI_RESET = "\u001B[0m"; public static final String ANSI_RED = "\u001B[31m"; @@ -47,7 +47,7 @@ public class SudokuPrinter { List listSymbols) { StringBuilder header = new StringBuilder(""); header.append(" "); - for (int x = 0; x < blockWidth*blockHeight; x++) { + for (int x = 0; x < blockWidth * blockHeight; x++) { header.append(x + 1).append(" "); if (x % blockWidth == blockWidth - 1 && x != blockWidth * blockHeight - 1) { header.append(" "); @@ -77,11 +77,12 @@ public class SudokuPrinter { } } - public static void printMultiDoku(final RenderableMultidoku rm, Symbols symbols, int blockWidth, int blockHeight) { - printMultiDoku(rm, symbols.getSymbols(), blockWidth, blockHeight); + public static String printMultiDoku(final RenderableMultidoku rm, Symbols symbols, int blockWidth, + int blockHeight) { + return printMultiDoku(rm, symbols.getSymbols(), blockWidth, blockHeight); } - public static void printMultiDoku(final RenderableMultidoku rm, List listSymbols, int blockWidth, + public static String printMultiDoku(final RenderableMultidoku rm, List listSymbols, int blockWidth, int blockHeight) { StringBuilder line = new StringBuilder("\n"); int nBlockInWidth = rm.getWidth() / blockWidth; @@ -108,7 +109,8 @@ public class SudokuPrinter { line.append("]\n"); } line.append("__".repeat(Math.max(0, rm.getWidth() + nBlockInWidth))).append("_\n"); - System.out.println(line); + // System.out.println(line); + return line.toString(); } public static void printMultiDokuWithIndex(final RenderableMultidoku rm, List listSymbols, int blockWidth, @@ -127,7 +129,7 @@ public class SudokuPrinter { if (y % blockHeight == 0) { line.append(" ").append("__".repeat(Math.max(0, rm.getWidth() + nBlockInWidth))).append("_\n"); } - line.append(y+1).append(" [ "); + line.append(y + 1).append(" [ "); for (int x = 0; x < rm.getWidth(); x++) { if (x % blockWidth == 0 && x > 0) { line.append("| "); @@ -182,12 +184,16 @@ public class SudokuPrinter { return result.toString(); } - public static void printMultiDoku(final MultiDoku doku, int blockWidth, int blockHeight, Symbols symbols) { - if (doku.getNbSubGrids() == 1) { - printRectangleSudoku(doku.getSubGrid(0), blockWidth, blockHeight, symbols); - } else { - printMultiDoku(RenderableMultidoku.fromMultidoku(doku), symbols, blockWidth, blockHeight); - } + public static String printMultiDoku(final MultiDoku doku) { + int blockWidth = doku.getSubGrid(0).getBlockWidth(); + if (blockWidth == 0) + return printMultiDoku(doku, 0, 0, Symbols.Numbers); + else + return printMultiDoku(doku, blockWidth, doku.getSubGrid(0).getSize() / blockWidth, Symbols.Letters); + } + + public static String printMultiDoku(final MultiDoku doku, int blockWidth, int blockHeight, Symbols symbols) { + return printMultiDoku(RenderableMultidoku.fromMultidoku(doku), symbols, blockWidth, blockHeight); } public static void printMultiDokuWithIndex(final MultiDoku doku, int blockWidth, int blockHeight, Symbols symbols) { diff --git a/app/src/main/java/sudoku/structure/MultiDoku.java b/app/src/main/java/sudoku/structure/MultiDoku.java index 995896f..85229ef 100644 --- a/app/src/main/java/sudoku/structure/MultiDoku.java +++ b/app/src/main/java/sudoku/structure/MultiDoku.java @@ -1,5 +1,6 @@ package sudoku.structure; +import sudoku.io.SudokuPrinter; import sudoku.io.SudokuSerializer; import java.util.ArrayList; @@ -182,7 +183,7 @@ public class MultiDoku { if (sudoku.getSize() != otherSudoku.getSize()) return false; for (int j = 0; j < sudoku.getSize() * sudoku.getSize(); j++) { - if (sudoku.getCell(i).getSymbolIndex() != otherSudoku.getCell(i).getSymbolIndex()) + if (sudoku.getCell(j).getSymbolIndex() != otherSudoku.getCell(j).getSymbolIndex()) return false; } } @@ -191,13 +192,7 @@ public class MultiDoku { @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(); + return SudokuPrinter.printMultiDoku(this); } public MultiDoku clone() { diff --git a/app/src/main/java/sudoku/structure/SudokuFactory.java b/app/src/main/java/sudoku/structure/SudokuFactory.java index feef263..d38dbca 100644 --- a/app/src/main/java/sudoku/structure/SudokuFactory.java +++ b/app/src/main/java/sudoku/structure/SudokuFactory.java @@ -328,7 +328,7 @@ public class SudokuFactory { } /** - * Rempli un MultiDoku donné par rapport à un difficulté. + * Remplit un MultiDoku donné par rapport à une difficulté. * * @param doku MultiDoku, vide. * @param difficulty Difficulty, qui correspond au pourcentage de cases à enlever. diff --git a/app/src/test/java/sudoku/solver/SolverTest.java b/app/src/test/java/sudoku/solver/SolverTest.java index d2e9ffb..e88a1af 100644 --- a/app/src/test/java/sudoku/solver/SolverTest.java +++ b/app/src/test/java/sudoku/solver/SolverTest.java @@ -42,13 +42,13 @@ class SolverTest { ns, 0, 1, ns); assertTrue(test.setImmutableCellsSymbol(immutableCells)); List correctCells = List.of( - 1, 2, 3, 0, - 0, 3, 2, 1, - 2, 1, 0, 3, - 3, 0, 1, 2); - assertTrue(result.setCellsSymbol(correctCells)); - assertTrue(result.isSolved()); - + 1, 2, 3, 0, + 0, 3, 2, 1, + 2, 1, 0, 3, + 3, 0, 1, 2); + assertTrue(result.setCellsSymbol(correctCells)); + assertTrue(result.isSolved()); + assertNotEquals(mdResult, mdTest); solver.solve(mdTest); assertTrue(mdTest.isSolved()); @@ -101,24 +101,32 @@ class SolverTest { MultiDoku mdResult = SudokuSerializer.deserializeSudoku(SudokuSerializer.serializeSudoku(mdTest)); assertFalse(mdTest.isSolved()); assertFalse(mdResult.isSolved()); + assertEquals(mdTest, mdResult); + assertTrue(solver.solve(mdTest)); + assertTrue(mdTest.isSolved()); assertFalse(mdResult.isSolved()); + System.out.println(mdTest); + System.out.println(mdResult); assertNotEquals(mdTest, mdResult); - solver.solve(mdResult); + + assertTrue(solver.solve(mdResult)); + assertEquals(mdTest, mdResult); } @Test void solveTest() { - initializeSolvers(); - testSize2(h); - testSize3(h); - testSize2(m); - testSize3(m); - testMDSize3(m); - testSize2(r); - testSize3(r); - testMDSize3(r); + for (int i = 0; i < 100; i++) { + testSize2(h); + testSize3(h); + testSize2(m); + testSize3(m); + testMDSize3(m); + testSize2(r); + testSize3(r); + testMDSize3(r); + } } } \ No newline at end of file