protected Sudoku SolveWithSubstitutions(String sudoku) /*on garde */ { var instance = Sudoku.Parse(sudoku); var substExprs = new List <Expr>(); var substVals = new List <Expr>(); for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (instance.GetCell(i, j) != 0) { substExprs.Add(X[i][j]); substVals.Add(z3Context.MkInt(instance.GetCell(i, j))); } } } BoolExpr instance_c = (BoolExpr)GenericContraints.Substitute(substExprs.ToArray(), substVals.ToArray()); var z3Solver = GetSolver(); z3Solver.Assert(instance_c); if (z3Solver.Check() == Status.SATISFIABLE) { Model m = z3Solver.Model; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (instance.GetCell(i, j) == 0) { instance.SetCell(i, j, ((IntNum)m.Evaluate(X[i][j])).Int); } } } } else { Console.WriteLine("Failed to solve sudoku"); } return(instance); }
public void Solve(GrilleSudoku s) { var substExprs = new List <Expr>(); var substVals = new List <Expr>(); for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (s.GetCellule(i, j) != 0) { substExprs.Add(X[i][j]); substVals.Add(z3Context.MkInt(s.GetCellule(i, j))); } } } BoolExpr instance_c = (BoolExpr)GenericContraints.Substitute(substExprs.ToArray(), substVals.ToArray()); var z3Solver = GetSolver(); z3Solver.Assert(instance_c); if (z3Solver.Check() == Status.SATISFIABLE) { Model m = z3Solver.Model; for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { if (s.GetCellule(i, j) == 0) { s.SetCell(i, j, ((IntNum)m.Evaluate(X[i][j])).Int); } } } } else { Console.WriteLine("Failed to solve sudoku"); } }