SimpleEntry<Integer, Integer> setRandomCell() { SimpleEntry<Integer, Integer> cellFilled = null; if (!game.isAllBoardFilled() && hints >= 1) { hints--; Random r = new Random(System.nanoTime()); int lineStart = r.nextInt(board.getSudokuSize()); int columnStart = r.nextInt(board.getSudokuSize()); boolean inserted = false; while (!inserted) { if (game.getCellNumber(lineStart, columnStart) == 0) { game.setCellNumber(lineStart, columnStart, board.getValueCell(lineStart, columnStart)); cellFilled = new SimpleEntry<Integer, Integer>(lineStart, columnStart); inserted = true; } else { if (columnStart == 8) { if (lineStart == 8) { lineStart = 0; columnStart = 0; } else { lineStart++; columnStart = 0; } } else columnStart++; } } } if (cellFilled == null) cellFilled = new SimpleEntry<Integer, Integer>(-1, -1); return cellFilled; }
public SimpleEntry<String, Integer> solveBoard(String board) { // Crea el sudoku, el resol i el retorna SudokuGame sudokuGame = new SudokuGame(board, 3); int time = sudokuGame.sudokuSolve(); SimpleEntry<String, Integer> result = new SimpleEntry<String, Integer>(sudokuGame.boardToString(), time); return result; }
@Test public void testFindPossibleRowToResolve() throws Exception { moveThroughGame(game, (i, j) -> Int.fromInteger((i * SIZE + i / SIZE + j) % (SIZE * SIZE) + 1)); game.set(8, 1, Int.ZERO); game.set(9, 1, Int.ZERO); assertThat(game.possibleRowsToResolve(), containsInAnyOrder(8, 9)); }
@Test public void testResolveCellBySquare() throws Exception { moveThroughGame(game, (i, j) -> Int.fromInteger((i * SIZE + i / SIZE + j) % (SIZE * SIZE) + 1)); game.set(9, 1, Int.ZERO); game.resolveBySquare(3, 1); assertThat(game.get(9, 1), is(Int.NINE)); }
public SimpleEntry<String, Integer> solveBoard(int id) { // Anem a buscar el tauler a la bd, el resolem i el retornem SimpleEntry<String, Integer> board = dataController.getBoard(id); SudokuGame sudokuGame = new SudokuGame(board.getKey(), board.getValue()); int time = sudokuGame.sudokuSolve(); SimpleEntry<String, Integer> result = new SimpleEntry<String, Integer>(sudokuGame.boardToString(), time); return result; }
public boolean Correct() { if (game.isAllBoardFilled()) { time = (int) (System.currentTimeMillis() - time) / 1000; return true; } return false; }
@Test public void testFillSudokuGame() throws Exception { Random random = new Random(); moveThroughGame(game, (i, j) -> Int.fromInteger(random.nextInt(SIZE * SIZE) + 1)); assertThat(game.isFill(), is(true)); }
private void moveThroughGame(SudokuGame g, DatumGenerator<Int> generator) { for (int i = 0; i < SIZE * SIZE; i++) { for (int j = 0; j < SIZE * SIZE; j++) { Int datum = generator.generate(i, j); game.set(i + 1, j + 1, datum); } } }
public ArrayList<Integer> getCellNumbers(int i, int j, int val) { TreeSet<Integer> set = game.getCellPossibleNumbers(i, j); return new ArrayList<>(set); }
public void setValueCell(int val, int col, int row) { game.setCellNumber(val, col, row); }
AbstractMap.SimpleEntry<String, Pair> getInfo() { return new SimpleEntry<String, Pair>( game.toString(), new Pair(((int) (System.currentTimeMillis() - time) / 1000), hints)); }
public boolean isCorrect(String board, int size) { SudokuGame sudokuGame = new SudokuGame(board, size); if (sudokuGame.sudokuSolve() != -1 && sudokuGame.isCorrectSudoku()) return true; return false; }