Ejemplo n.º 1
0
 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))
Ejemplo n.º 2
0
 def testFindNakedSingles(self):
     board = Board()
     board.boardFromString(self.NAKED_SINGLES)
     easySolver = EasySolver(board)
     singles = easySolver.findNakedSingles()
     
     # Check we found all the expected results
     assert(len(singles) == 4)
     
     # Validate the value of the single found
     assert((0, 8) in singles)
     assert(singles[(0, 8)] == '3')
     assert((0, 7) in singles)
     assert(singles[(0, 7)] == '5')
     assert((4, 3) in singles)
     assert(singles[(4, 3)] == '6')
     assert((6, 6) in singles)
     assert(singles[(6, 6)] == '2')
Ejemplo n.º 3
0
 def testFindHiddenSingles(self):
     board = Board()
     board.boardFromString(self.NAKED_SINGLES)
     
     easySolver = EasySolver(board)
     singles = easySolver.findHiddenSingles()
     
     # Check we found all the expected results
     assert(len(singles) == 6)
     
     # Validate the value of the single found
     assert((5, 5) in singles)
     assert(singles[(5, 5)] == '3')
     assert((7, 6) in singles)
     assert(singles[(7, 6)] == '3')
     assert((3, 6) in singles)
     assert(singles[(3, 6)] == '5')
     assert((2, 0) in singles)
     assert(singles[(2, 0)] == '6')
     assert((8, 7) in singles)
     assert(singles[(8, 7)] == '7')
     assert((4, 1) in singles)
     assert(singles[(4, 1)] == '7')
Ejemplo n.º 4
0
from solver.easysolver import EasySolver
from board.boardutils import *

import logging

IMPOSSIBLE_STRING = '1.......2.9.4...5...6...7...5.9.3.......7.......85..4.7.....6...3...9.8...2.....1'
HARD_STRING = '6.5..2..8...1...7..9.5..6....2736.8....485....3.9217....4..3.9..5...4...3..8..1.2'
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()