def main(): parser = argparse.ArgumentParser(description="A sudoku resolver") parser.add_argument("-v", "--verbose", action="count", default=0, help="increase output verbosity (-vv or --verbose=2 for even more verbosity)") parser.add_argument("-g", "--grid", help="a grid directly on the command line (9x9 digits and dots, with or without \\n)") parser.add_argument("gridAsFile", type=argparse.FileType('r'), nargs='?', help="a file containing the grid to solve") args = parser.parse_args() if not args.gridAsFile and not args.grid: parser.error("A grid must be provided.") logLevel = [logging.WARNING, logging.INFO, logging.DEBUG][args.verbose] logging.basicConfig(format='%(levelname)s: %(message)s', level=logLevel) grid = prepareGrid(args.gridAsFile, args.grid) print "Loaded grid :" print grid.display() gridResolution = GridResolution(grid) if gridResolution.solve(): logging.info("Grid solved completely !") else: logging.info("Solving stopped without being able to finish the grid.") print "Final grid :" print grid.display() logging.info("Distribution of resolution strategies used :") for key, value in Stats.results().iteritems(): logging.info(" {}\t : {} cell(s)".format(key, value))
def test_solve_strategies_unsuccessful(self): gridResolution = GridResolution(grid=Grid(), strategies=[MockStrategy(False)]) self.assertFalse(gridResolution.solve())
def test_solve_in_many_passes(self): grid = MockGrid(3) gridResolution = GridResolution(grid=grid, strategies=[MockStrategy(True)]) self.assertTrue(gridResolution.solve())
def test_solve_strategies_successful_and_grid_solved(self): gridResolution = GridResolution(grid=Grid(StringIO("415638972\n362479185\n789215364\n926341758\n138756429\n574982631\n257164893\n843597216\n691823547\n")), strategies=[MockStrategy(False), MockStrategy(True)]) self.assertTrue(gridResolution.solve())