MCPcopy Create free account
hub / github.com/Z3Prover/z3 / sudokuExample

Method sudokuExample

examples/java/JavaExample.java:491–593  ·  view source on GitHub ↗
(Context ctx)

Source from the content-addressed store, hash-verified

489 // / Sudoku solving example.
490
491 void sudokuExample(Context ctx) throws TestFailedException
492 {
493 System.out.println("SudokuExample");
494 Log.append("SudokuExample");
495
496 // 9x9 matrix of integer variables
497 IntExpr[][] X = new IntExpr[9][];
498 for (int i = 0; i < 9; i++)
499 {
500 X[i] = new IntExpr[9];
501 for (int j = 0; j < 9; j++)
502 X[i][j] = (IntExpr) ctx.mkConst(
503 ctx.mkSymbol("x_" + (i + 1) + "_" + (j + 1)),
504 ctx.getIntSort());
505 }
506
507 // each cell contains a value in {1, ..., 9}
508 BoolExpr[][] cells_c = new BoolExpr[9][];
509 for (int i = 0; i < 9; i++)
510 {
511 cells_c[i] = new BoolExpr[9];
512 for (int j = 0; j < 9; j++)
513 cells_c[i][j] = ctx.mkAnd(ctx.mkLe(ctx.mkInt(1), X[i][j]),
514 ctx.mkLe(X[i][j], ctx.mkInt(9)));
515 }
516
517 // each row contains a digit at most once
518 BoolExpr[] rows_c = new BoolExpr[9];
519 for (int i = 0; i < 9; i++)
520 rows_c[i] = ctx.mkDistinct(X[i]);
521
522 // each column contains a digit at most once
523 BoolExpr[] cols_c = new BoolExpr[9];
524 for (int j = 0; j < 9; j++) {
525 IntExpr[] col = new IntExpr[9];
526 for (int i = 0; i < 9; i++) {
527 col[i] = X[i][j];
528 }
529 cols_c[j] = ctx.mkDistinct(col);
530 }
531
532 // each 3x3 square contains a digit at most once
533 BoolExpr[][] sq_c = new BoolExpr[3][];
534 for (int i0 = 0; i0 < 3; i0++)
535 {
536 sq_c[i0] = new BoolExpr[3];
537 for (int j0 = 0; j0 < 3; j0++)
538 {
539 IntExpr[] square = new IntExpr[9];
540 for (int i = 0; i < 3; i++)
541 for (int j = 0; j < 3; j++)
542 square[3 * i + j] = X[3 * i0 + i][3 * j0 + j];
543 sq_c[i0][j0] = ctx.mkDistinct(square);
544 }
545 }
546
547 BoolExpr sudoku_c = ctx.mkTrue();
548 for (BoolExpr[] t : cells_c)

Callers 1

mainMethod · 0.95

Calls 15

appendMethod · 0.95
addMethod · 0.95
checkMethod · 0.95
getModelMethod · 0.95
evaluateMethod · 0.95
mkConstMethod · 0.80
mkSymbolMethod · 0.80
getIntSortMethod · 0.80
mkAndMethod · 0.80
mkLeMethod · 0.80
mkIntMethod · 0.80
mkDistinctMethod · 0.80

Tested by

no test coverage detected