Array Name Variables: Rules Void Postsudokuconstraints (Cpproblem P)
Array Name Variables: Rules Void Postsudokuconstraints (Cpproblem P)
Column Constraints
Block Constraints
Layout TableLayout sudokuProblemLayout(RuleSolver s)
<h4>Sudoku Problem</h4>
sudokuProblemTable(s);
<i>Fill the grid so that each column, each row, and each of the nine
3×3 blocks contains the digits from 1 to 9, only one time each</i>
actions()
Layout TableLayout
sudokuProblemTable(RuleSolver s)
block00(s) block01(s) block02(s)
block10(s) block11(s) block12(s)
block20(s) block21(s) block22(s)
Layout TableLayout
block12(RuleSolver s)
dat(3,7) dat(3,8)
dat(4,7) dat(4,8)
dat(5,7) dat(5,8)
Layout TableLayout
block22(RuleSolver s)
dat(6,7) dat(6,8)
dat(7,7) dat(7,8)
dat(8,7) dat(8,8)
Layout TableLayout sudokuSolutionLayout(RuleSolver s)
<h4>Sudoku Solution</h4>
sudokuSolutionTable(s);
actions()
0 5 0 0 0 4 0 2 0 9 0 0 6 0
4 0 0 0 5 0 1 0 0 7 0 0 4 9
8 0 5 0 0 0 6 0 0 8 9 7 0 4
6 7 0 2 9 5 0 1 4 0 0 3 9 0
0 0 1 0 0 0 7 0 9 4 6 5 0 8
0 0 6 0 1 0 0 0 7 5 0 0 2 6
0 1 0 4 0 0 0 8 0 6 0 0 5 0
5 0 0 3 0 0 2 6 0 0 4 9 7 0
Datatype
SudokuData
String id
int x0
int x1
int x2
int x3
int x4
int x5
int x6
int x7
int x8
1
x5 x6 x7 x8
1 9 4 0
5 0 0 3
3 0 0 8
0 6 3 5
6 8 0 0
0 2 9 1
9 0 0 7
4 0 0 9
8 3 5 0
Method String processSudoku(RuleSolver solver)
problemFlowRules(solver);
sudokuNextLayout(solver);
return dialog().next;
CpProblem p = s.newProblem();
// Create 9X9 Square of constrained variables with values from 1 to 9
CpVariable[] vars = p.addSquare("x",1, 9, 9);
postDataConstraints(p);
postSudokuConstraints(p);
CpVariable[] x = p.getArray("x");
for (int i = 0; i < 9; i++) {
if (data[i].x0 != 0) p.add(x[i*9+0].eq(data[i].x0));
if (data[i].x1 != 0) p.add(x[i*9+1].eq(data[i].x1));
if (data[i].x2 != 0) p.add(x[i*9+2].eq(data[i].x2));
if (data[i].x3 != 0) p.add(x[i*9+3].eq(data[i].x3));
if (data[i].x4 != 0) p.add(x[i*9+4].eq(data[i].x4));
if (data[i].x5 != 0) p.add(x[i*9+5].eq(data[i].x5));
if (data[i].x6 != 0) p.add(x[i*9+6].eq(data[i].x6));
if (data[i].x7 != 0) p.add(x[i*9+7].eq(data[i].x7));
if (data[i].x8 != 0) p.add(x[i*9+8].eq(data[i].x8));
}
if (!p.postConstraints()) {
dialog().addError();
dialog().status = "Invalid data";
}
Method String launchSudoku(RuleSolver solver)
out("Launch Sudoku");
dialog().setLastAction("Problem");
return processSudoku(solver);
CpVariable[] x = p.getArray("x");
if (p.solve(x, new CpSelectorMinSize(x)) != null) {
return true;
}
else {
p.log("No Solutions");
return false;
}
int value = 0;
if (j == 0) { value = data[i].x0; }
if (j == 1) { value = data[i].x1; }
if (j == 2) { value = data[i].x2; }
if (j == 3) { value = data[i].x3; }
if (j == 4) { value = data[i].x4; }
if (j == 5) { value = data[i].x5; }
if (j == 6) { value = data[i].x6; }
if (j == 7) { value = data[i].x7; }
if (j == 8) { value = data[i].x8; }
if (value == 0)
return ask();
"" + value;
Rules void sudokuNextLayout(RuleSolver s)
AND THEN
Next Step is Execute Rules and Define Next Layout
{
ProblemLayout sudokuProblemLayout(s);
}
{
createSudokuProblem(s);
TableLayout layout;
if (solveSudokuProblem(s.cpProblem))
SolutionLayout layout = sudokuSolutionLayout(s);
else
layout = noSolutionLayout();
layout;
}