public static void main(final String[] args) { // http://www.telegraph.co.uk/news/science/science-news/9359579/Worlds-hardest-sudoku-can-you-crack-it.html final Integer[] data = { 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, 9, 0, 2, 0, 0, 0, 5, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 4, 5, 7, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 6, 8, 0, 0, 8, 5, 0, 0, 0, 1, 0, 0, 9, 0, 0, 0, 0, 4, 0, 0 }; final ISudokuGrid puzzle = new SudokuGrid(data); final ISolver solver = new Solver(puzzle); final long start = System.currentTimeMillis(); final boolean solved = solver.solve(); final long finish = System.currentTimeMillis(); if (solved) { System.out.print(puzzle); final long elapsed = finish - start; final double seconds = (double) elapsed / 1000.0 + (double) (elapsed % 1000L) / 1000.0; System.out.format("\n\nTime taken %f seconds\n", seconds); } else { System.out.println("No solution exists"); } }
@Override public IResponse execute(ISolver solver) { SMT.Configuration smtConfig = solver.smt(); if (!(solver instanceof Solver_test)) { return smtConfig.responseFactory.error( "This kind of solver (" + solver.getClass() + ") is not able to execute a what command", null); } IPrinter printer = smtConfig.defaultPrinter; SymbolTable symTable = ((Solver_test) solver).symTable; Iterator<IIdentifier> iter = ids().iterator(); if (!iter.hasNext()) { // No arguments - print everything in the symbol table SymbolTable.Iterator symiter = symTable.iterator(); while (symiter.hasNext()) { SymbolTable.Entry n = symiter.next(); smtConfig.log.logOut(printer.toString(n.name) + " : " + printer.toString(n.sort)); } } else { while (iter.hasNext()) { IIdentifier s = iter.next(); ISort.IDefinition sortDef = symTable.lookupSort(s); if (sortDef != null) smtConfig.log.logOut(printer.toString(s) + " : " + printer.toString(sortDef)); else { Map<Integer, List<SymbolTable.Entry>> map = symTable.lookup(s); if (map != null && map.size() != 0) { for (List<SymbolTable.Entry> entrylist : map.values()) { for (SymbolTable.Entry entry : entrylist) { smtConfig.log.logOut(printer.toString(s) + " : " + printer.toString(entry.sort)); } } } else { smtConfig.log.logOut(printer.toString(s) + " : -no entry- "); } } } } return smtConfig.responseFactory.success(); }