示例#1
0
 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;
 }
示例#2
0
 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));
  }
示例#5
0
 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;
 }
示例#6
0
 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);
     }
   }
 }
示例#9
0
 public ArrayList<Integer> getCellNumbers(int i, int j, int val) {
   TreeSet<Integer> set = game.getCellPossibleNumbers(i, j);
   return new ArrayList<>(set);
 }
示例#10
0
 public void setValueCell(int val, int col, int row) {
   game.setCellNumber(val, col, row);
 }
示例#11
0
 AbstractMap.SimpleEntry<String, Pair> getInfo() {
   return new SimpleEntry<String, Pair>(
       game.toString(), new Pair(((int) (System.currentTimeMillis() - time) / 1000), hints));
 }
示例#12
0
  public boolean isCorrect(String board, int size) {
    SudokuGame sudokuGame = new SudokuGame(board, size);

    if (sudokuGame.sudokuSolve() != -1 && sudokuGame.isCorrectSudoku()) return true;
    return false;
  }