def testAssignHiddenSingles(self): board = Board(); board.boardFromString(self.NAKED_SINGLES) # Create a copy of the original board originalBoard = Board(board) easySolver = EasySolver(board) result = easySolver.assignHiddenSingles() # Make sure all were assigned assert(result == 6) # Make sure that the board now has the singles assigned assert(board.getPosition(5, 5) == '3') assert(board.getPosition(7, 6) == '3') assert(board.getPosition(3, 6) == '5') assert(board.getPosition(2, 0) == '6') assert(board.getPosition(8, 7) == '7') assert(board.getPosition(4, 1) == '7') # 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 [(5, 5), (7, 6), (3, 6), (2, 0), (8, 7), (4, 1)]: 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()))