Beispiel #1
0
 @Before
 public void before() {
   sudoku = new SudokuBuilder(SudokuTypes.standard9x9).createSudoku();
   sudoku.setComplexity(Complexity.arbitrary);
   solver = new Solver(sudoku);
   sudoku16x16 = new SudokuBuilder(SudokuTypes.standard16x16).createSudoku();
   sudoku16x16.setComplexity(Complexity.arbitrary);
   solution16x16 = new PositionMap<Integer>(sudoku16x16.getSudokuType().getSize());
 }
Beispiel #2
0
  @Test
  public void testStandard16x16No2() {
    sudoku16x16.getField(Position.get(0, 0)).setCurrentValue(0);
    sudoku16x16.getField(Position.get(3, 0)).setCurrentValue(1);
    sudoku16x16.getField(Position.get(4, 0)).setCurrentValue(2);
    sudoku16x16.getField(Position.get(5, 0)).setCurrentValue(3);
    sudoku16x16.getField(Position.get(8, 0)).setCurrentValue(11);
    sudoku16x16.getField(Position.get(10, 0)).setCurrentValue(5);
    sudoku16x16.getField(Position.get(14, 0)).setCurrentValue(6);
    sudoku16x16.getField(Position.get(2, 1)).setCurrentValue(7);
    sudoku16x16.getField(Position.get(6, 1)).setCurrentValue(6);
    sudoku16x16.getField(Position.get(9, 1)).setCurrentValue(2);
    sudoku16x16.getField(Position.get(12, 1)).setCurrentValue(8);
    sudoku16x16.getField(Position.get(13, 1)).setCurrentValue(9);
    sudoku16x16.getField(Position.get(14, 1)).setCurrentValue(5);
    sudoku16x16.getField(Position.get(15, 1)).setCurrentValue(10);
    sudoku16x16.getField(Position.get(1, 2)).setCurrentValue(11);
    sudoku16x16.getField(Position.get(4, 2)).setCurrentValue(9);
    sudoku16x16.getField(Position.get(7, 2)).setCurrentValue(0);
    sudoku16x16.getField(Position.get(9, 2)).setCurrentValue(12);
    sudoku16x16.getField(Position.get(11, 2)).setCurrentValue(10);
    sudoku16x16.getField(Position.get(14, 2)).setCurrentValue(13);
    sudoku16x16.getField(Position.get(0, 3)).setCurrentValue(2);
    sudoku16x16.getField(Position.get(3, 3)).setCurrentValue(14);
    sudoku16x16.getField(Position.get(4, 3)).setCurrentValue(1);
    sudoku16x16.getField(Position.get(7, 3)).setCurrentValue(13);
    sudoku16x16.getField(Position.get(11, 3)).setCurrentValue(8);
    sudoku16x16.getField(Position.get(14, 3)).setCurrentValue(11);
    sudoku16x16.getField(Position.get(0, 4)).setCurrentValue(12);
    sudoku16x16.getField(Position.get(4, 4)).setCurrentValue(7);
    sudoku16x16.getField(Position.get(7, 4)).setCurrentValue(9);
    sudoku16x16.getField(Position.get(9, 4)).setCurrentValue(11);
    sudoku16x16.getField(Position.get(10, 4)).setCurrentValue(1);
    sudoku16x16.getField(Position.get(12, 4)).setCurrentValue(0);
    sudoku16x16.getField(Position.get(13, 4)).setCurrentValue(14);
    sudoku16x16.getField(Position.get(1, 5)).setCurrentValue(10);
    sudoku16x16.getField(Position.get(2, 5)).setCurrentValue(6);
    sudoku16x16.getField(Position.get(3, 5)).setCurrentValue(5);
    sudoku16x16.getField(Position.get(7, 5)).setCurrentValue(15);
    sudoku16x16.getField(Position.get(11, 5)).setCurrentValue(14);
    sudoku16x16.getField(Position.get(14, 5)).setCurrentValue(4);
    sudoku16x16.getField(Position.get(15, 5)).setCurrentValue(12);
    sudoku16x16.getField(Position.get(3, 6)).setCurrentValue(9);
    sudoku16x16.getField(Position.get(5, 6)).setCurrentValue(4);
    sudoku16x16.getField(Position.get(6, 6)).setCurrentValue(14);
    sudoku16x16.getField(Position.get(9, 6)).setCurrentValue(3);
    sudoku16x16.getField(Position.get(11, 6)).setCurrentValue(7);
    sudoku16x16.getField(Position.get(14, 6)).setCurrentValue(10);
    sudoku16x16.getField(Position.get(0, 7)).setCurrentValue(15);
    sudoku16x16.getField(Position.get(3, 7)).setCurrentValue(4);
    sudoku16x16.getField(Position.get(4, 7)).setCurrentValue(8);
    sudoku16x16.getField(Position.get(5, 7)).setCurrentValue(11);
    sudoku16x16.getField(Position.get(8, 7)).setCurrentValue(0);
    sudoku16x16.getField(Position.get(14, 7)).setCurrentValue(7);
    sudoku16x16.getField(Position.get(1, 8)).setCurrentValue(1);
    sudoku16x16.getField(Position.get(7, 8)).setCurrentValue(12);
    sudoku16x16.getField(Position.get(10, 8)).setCurrentValue(11);
    sudoku16x16.getField(Position.get(11, 8)).setCurrentValue(4);
    sudoku16x16.getField(Position.get(12, 8)).setCurrentValue(7);
    sudoku16x16.getField(Position.get(15, 8)).setCurrentValue(2);
    sudoku16x16.getField(Position.get(1, 9)).setCurrentValue(12);
    sudoku16x16.getField(Position.get(4, 9)).setCurrentValue(14);
    sudoku16x16.getField(Position.get(6, 9)).setCurrentValue(2);
    sudoku16x16.getField(Position.get(9, 9)).setCurrentValue(13);
    sudoku16x16.getField(Position.get(10, 9)).setCurrentValue(7);
    sudoku16x16.getField(Position.get(12, 9)).setCurrentValue(15);
    sudoku16x16.getField(Position.get(0, 10)).setCurrentValue(4);
    sudoku16x16.getField(Position.get(1, 10)).setCurrentValue(7);
    sudoku16x16.getField(Position.get(4, 10)).setCurrentValue(0);
    sudoku16x16.getField(Position.get(8, 10)).setCurrentValue(1);
    sudoku16x16.getField(Position.get(12, 10)).setCurrentValue(12);
    sudoku16x16.getField(Position.get(13, 10)).setCurrentValue(8);
    sudoku16x16.getField(Position.get(14, 10)).setCurrentValue(14);
    sudoku16x16.getField(Position.get(2, 11)).setCurrentValue(11);
    sudoku16x16.getField(Position.get(3, 11)).setCurrentValue(3);
    sudoku16x16.getField(Position.get(5, 11)).setCurrentValue(5);
    sudoku16x16.getField(Position.get(6, 11)).setCurrentValue(15);
    sudoku16x16.getField(Position.get(8, 11)).setCurrentValue(12);
    sudoku16x16.getField(Position.get(11, 11)).setCurrentValue(6);
    sudoku16x16.getField(Position.get(15, 11)).setCurrentValue(4);
    sudoku16x16.getField(Position.get(1, 12)).setCurrentValue(2);
    sudoku16x16.getField(Position.get(4, 12)).setCurrentValue(11);
    sudoku16x16.getField(Position.get(8, 12)).setCurrentValue(5);
    sudoku16x16.getField(Position.get(11, 12)).setCurrentValue(3);
    sudoku16x16.getField(Position.get(12, 12)).setCurrentValue(10);
    sudoku16x16.getField(Position.get(15, 12)).setCurrentValue(15);
    sudoku16x16.getField(Position.get(1, 13)).setCurrentValue(6);
    sudoku16x16.getField(Position.get(4, 13)).setCurrentValue(15);
    sudoku16x16.getField(Position.get(6, 13)).setCurrentValue(4);
    sudoku16x16.getField(Position.get(8, 13)).setCurrentValue(13);
    sudoku16x16.getField(Position.get(11, 13)).setCurrentValue(0);
    sudoku16x16.getField(Position.get(14, 13)).setCurrentValue(1);
    sudoku16x16.getField(Position.get(0, 14)).setCurrentValue(10);
    sudoku16x16.getField(Position.get(1, 14)).setCurrentValue(0);
    sudoku16x16.getField(Position.get(2, 14)).setCurrentValue(14);
    sudoku16x16.getField(Position.get(3, 14)).setCurrentValue(8);
    sudoku16x16.getField(Position.get(6, 14)).setCurrentValue(12);
    sudoku16x16.getField(Position.get(9, 14)).setCurrentValue(1);
    sudoku16x16.getField(Position.get(13, 14)).setCurrentValue(13);
    sudoku16x16.getField(Position.get(1, 15)).setCurrentValue(13);
    sudoku16x16.getField(Position.get(5, 15)).setCurrentValue(10);
    sudoku16x16.getField(Position.get(7, 15)).setCurrentValue(1);
    sudoku16x16.getField(Position.get(10, 15)).setCurrentValue(12);
    sudoku16x16.getField(Position.get(11, 15)).setCurrentValue(2);
    sudoku16x16.getField(Position.get(12, 15)).setCurrentValue(4);
    sudoku16x16.getField(Position.get(15, 15)).setCurrentValue(11);

    sudoku16x16.setComplexity(Complexity.arbitrary);
    Solver solver = new Solver(sudoku16x16);
    assertEquals(solver.validate(solution16x16, false), ComplexityRelation.CONSTRAINT_SATURATION);

    // copy solution to current value
    for (int j = 0; j < sudoku16x16.getSudokuType().getSize().getY(); j++) {
      for (int i = 0; i < sudoku16x16.getSudokuType().getSize().getX(); i++) {
        sudoku16x16
            .getField(Position.get(i, j))
            .setCurrentValue(solution16x16.get(Position.get(i, j)));
      }
    }

    // check constraints
    for (Constraint c : sudoku16x16.getSudokuType()) {
      assertTrue(c.isSaturated(sudoku16x16));
    }

    // print solution if wanted
    System.out.println("Solution (16x16) - Complexity: " + solver.sudoku.getComplexityValue());
    if (PRINT_SOLUTIONS) {
      StringBuilder sb = new StringBuilder();
      for (int j = 0; j < sudoku16x16.getSudokuType().getSize().getY(); j++) {
        for (int i = 0; i < sudoku16x16.getSudokuType().getSize().getX(); i++) {
          int value = sudoku16x16.getField(Position.get(i, j)).getCurrentValue();
          String op = value + "";
          if (value < 10) op = " " + value;
          if (value == -1) op = " x";
          sb.append(op + ", ");
        }
        sb.append("\n");
      }
      System.out.println(sb);
    }
  }