def testAssignNakedSingles(self): board = Board(); board.boardFromString(self.NAKED_SINGLES) # Create a copy of the original board originalBoard = Board(board) easySolver = EasySolver(board) result = easySolver.assignNakedSingles() # Make sure all were assigned assert(result == 4) # Make sure that the board now has the naked singles assigned assert(board.getPosition(0, 8) == '3') assert(board.getPosition(0, 7) == '5') assert(board.getPosition(4, 3) == '6') assert(board.getPosition(6, 6) == '2') # Ensure the only changes to the board are the assigned singles assert(board != originalBoard) for y in xrange(board.getDimensions()): for x in xrange(board.getDimensions()): # Don't bother checking fields we know have changed if not (x, y) in [(0, 8), (0, 7), (4, 3), (6, 6)]: assert(board.getPosition(x, y) == originalBoard.getPosition(x, y))
EASY_STRING = '79....3.......69..8...3..76.....5..2..54187..4..7.....61..9...8..23.......9....54' logger = logging.getLogger('sudoku') logging.basicConfig(level=logging.INFO) board = Board() board.boardFromString(HARD_STRING) logger.info('\n' + boardToString(board)) easySolver = EasySolver(board) assigned = -1 while assigned != 0: if easySolver.getAvailableMap().getUnassigned() == 0: break assigned = 0 assignedNakedSingles = 0 assignedHiddenSingles = 0 assignedNakedSingles += easySolver.assignNakedSingles() logger.info('Found ' + str(assignedNakedSingles) + ' naked singles') assignedHiddenSingles = easySolver.assignHiddenSingles() logger.info('Found ' + str(assignedNakedSingles) + ' hidden singles') assignedLockedCandidates1 = easySolver.assignLockedCandidates1() logger.info('Found ' + str(assignedLockedCandidates1) + ' locked candidates') assigned += assignedNakedSingles assigned += assignedHiddenSingles assigned += assignedLockedCandidates1 logger.info('\n' + boardToString(easySolver.getBoard()))