Пример #1
0
    def create_algorith_to_solve_sudoku(self, sudoku_matrix, empty_character):
        """ Method used for create the algorithm to solve given the expected sudoku matrix 
            and empty character
            
            Keyword arguments:
            sudoku_matrix -- stores the sudoku in the valid matrix ready to be solved
            empty_character -- stores the selected character for the empty spots 

        """

        algorithm_selected = self.configuration.get_algorithm()
        algoritms = []
        for i in range(0, len(sudoku_matrix)):
            algoritm_to_solve = Algorithm(sudoku_matrix[i][0], empty_character)
            if algorithm_selected == 'norvig':
                algoritm_to_solve = NorvigAlgorithm(sudoku_matrix[i][0],
                                                    empty_character)
            elif algorithm_selected == 'backtracking':
                algoritm_to_solve = BacktrakingAlgorithm(
                    sudoku_matrix[i][0], empty_character)
            elif algorithm_selected == 'brute force':
                algoritm_to_solve = BruteForceAlgorithm(
                    sudoku_matrix[i][0], empty_character)
            algoritms.append(algoritm_to_solve)
        return algoritms
    def test_soduku_to_solve_is_valid_when_characters_to_replace_are_dot(self):
        sudoku_test_only_numbers = NorvigAlgorithm(
            """.923.....
....8.1..
.........
1.7.4....
.......65
8........
.6.5.2...
4.....7..
...9.....""", ".")
    def test_soduku_to_solve_is_invalid_when_contains_less_than_81_numbers(
            self):
        sudoku_test_only_numbers = NorvigAlgorithm(
            """092300000
000080100
000000000
107040000
000000065
800000000
060502000""", "0")

        self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
    def test_soduku_to_solve_cannot_contain_letters(self):
        sudoku_test_only_numbers = NorvigAlgorithm(
            """092300000
000080100
000000000
107040000
000000A65
800000000
060502000
400000C00
000900000""", "0")

        self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
    def test_soduku_to_solve_only_contains_numbers(self):
        sudoku_test_only_numbers = NorvigAlgorithm(
            """092300000
000080100
000000000
107040000
000000065
800000000
060502000
400000700
000900000""", "0")

        self.assertTrue(sudoku_test_only_numbers.sudoku_data_is_valid())
    def test_soduku_to_solve_is_valid_when_characters_to_replace_are_porcentage(
            self):
        sudoku_test_only_numbers = NorvigAlgorithm(
            """%923%%%%%
%%%%8%1%%
%%%%%%%%%
1%7%4%%%%
%%%%%%%65
8%%%%%%%%
%6%5%2%%%
4%%%%%7%%
%%%9%%%%%""", "%")

        self.assertTrue(sudoku_test_only_numbers.sudoku_data_is_valid())
    def test_soduku_to_solve_is_invalid_when_contains_more_than_81_numbers(
            self):
        sudoku_test_only_numbers = NorvigAlgorithm(
            """092300000
000080100
000000000
107040000
000000065
800000000
060502000
400000700
000900000
000000065
060502000""", "0")
    def test_soduku_to_solve_not_contain_spaces_as_empty_value_if_the_empty_value_is_zero(
            self):
        sudoku_test_only_numbers = NorvigAlgorithm(
            """ 923    
    8 1  
      1
1 7 4
      465
8        
 6 5 2   
4     2  
   9      """, "0")

        self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
    def test_soduku_to_solve_cannot_contain_dot_as_empty_value_if_the_empty_value_is_zero(
            self):
        sudoku_test_only_numbers = NorvigAlgorithm(
            """092300000
....80100
...000000
107040000
..0..0465
800000000
060502000
400000200
000900000""", "0")

        self.assertFalse(sudoku_test_only_numbers.sudoku_data_is_valid())
    def setUp(self):

        # Test algorithm Norvig attributes
        sudoku_test_values = """003020600
900305001
001806400
008102900
700000008
006708200
002609500
800203009
005010300"""
        self.sudoku_test_attributes = NorvigAlgorithm(sudoku_test_values, "0")
        self.len_squares = 81
        self.len_unitlist = 27
        self.units_c2 = [[
            'A2', 'B2', 'C2', 'D2', 'E2', 'F2', 'G2', 'H2', 'I2'
        ], ['C1', 'C2', 'C3', 'C4', 'C5', 'C6', 'C7', 'C8',
            'C9'], ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']]

        self.peers_c2 = set([
            'A2', 'B2', 'D2', 'E2', 'F2', 'G2', 'H2', 'I2', 'C1', 'C3', 'C4',
            'C5', 'C6', 'C7', 'C8', 'C9', 'A1', 'A3', 'B1', 'B3'
        ])
    def test_solution_sudoku_easy_10(self):
        sudoku_test_easy_10 = NorvigAlgorithm(
            """001900003
900700160
030005007
050000009
004302600
200000070
600100030
042007006
500006800""", "0")

        sudoku_test_easy_10_solution = {
            'G7': '7',
            'G6': '4',
            'G5': '5',
            'G4': '1',
            'G3': '9',
            'G2': '8',
            'G1': '6',
            'G9': '2',
            'G8': '3',
            'C9': '7',
            'C8': '2',
            'C3': '8',
            'C2': '3',
            'C1': '4',
            'C7': '9',
            'C6': '5',
            'C5': '1',
            'C4': '6',
            'A9': '3',
            'A8': '5',
            'F1': '2',
            'F2': '1',
            'F3': '6',
            'F4': '5',
            'F5': '8',
            'F6': '9',
            'F7': '3',
            'F8': '7',
            'F9': '4',
            'B4': '7',
            'B5': '4',
            'B6': '3',
            'B7': '1',
            'B1': '9',
            'B2': '2',
            'B3': '5',
            'B8': '6',
            'B9': '8',
            'I9': '1',
            'I8': '4',
            'I1': '5',
            'I3': '3',
            'I2': '7',
            'I5': '9',
            'I4': '2',
            'I7': '8',
            'I6': '6',
            'A1': '7',
            'A3': '1',
            'A2': '6',
            'E9': '5',
            'A4': '9',
            'A7': '4',
            'A6': '8',
            'E5': '7',
            'E4': '3',
            'E7': '6',
            'E6': '2',
            'E1': '8',
            'E3': '4',
            'E2': '9',
            'E8': '1',
            'A5': '2',
            'H8': '9',
            'H9': '6',
            'H2': '4',
            'H3': '2',
            'H1': '1',
            'H6': '7',
            'H7': '5',
            'H4': '8',
            'H5': '3',
            'D8': '8',
            'D9': '9',
            'D6': '1',
            'D7': '2',
            'D4': '4',
            'D5': '6',
            'D2': '5',
            'D3': '7',
            'D1': '3'
        }

        self.assertEquals(sudoku_test_easy_10.solve_sudoku(),
                          sudoku_test_easy_10_solution)