Exemple #1
0
 def test_general_zone_clauses(self):
     board = SudokuBoard([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0],
                          [0, 0, 0, 0]])
     result = exactly_one_clauses(board.zones(), board.cell_width)
     cnf = sorted([str(c) for c in result])
     expected = [
         "!d1_1_1 || !d1_1_2", "!d1_1_1 || !d1_2_1", "!d1_1_1 || !d1_2_2",
         "!d1_1_2 || !d1_2_1", "!d1_1_2 || !d1_2_2", "!d1_1_3 || !d1_1_4",
         "!d1_1_3 || !d1_2_3", "!d1_1_3 || !d1_2_4", "!d1_1_4 || !d1_2_3",
         "!d1_1_4 || !d1_2_4", "!d1_2_1 || !d1_2_2", "!d1_2_3 || !d1_2_4",
         "!d1_3_1 || !d1_3_2", "!d1_3_1 || !d1_4_1", "!d1_3_1 || !d1_4_2",
         "!d1_3_2 || !d1_4_1", "!d1_3_2 || !d1_4_2", "!d1_3_3 || !d1_3_4",
         "!d1_3_3 || !d1_4_3", "!d1_3_3 || !d1_4_4", "!d1_3_4 || !d1_4_3",
         "!d1_3_4 || !d1_4_4", "!d1_4_1 || !d1_4_2", "!d1_4_3 || !d1_4_4",
         "!d2_1_1 || !d2_1_2", "!d2_1_1 || !d2_2_1", "!d2_1_1 || !d2_2_2",
         "!d2_1_2 || !d2_2_1", "!d2_1_2 || !d2_2_2", "!d2_1_3 || !d2_1_4",
         "!d2_1_3 || !d2_2_3", "!d2_1_3 || !d2_2_4", "!d2_1_4 || !d2_2_3",
         "!d2_1_4 || !d2_2_4", "!d2_2_1 || !d2_2_2", "!d2_2_3 || !d2_2_4",
         "!d2_3_1 || !d2_3_2", "!d2_3_1 || !d2_4_1", "!d2_3_1 || !d2_4_2",
         "!d2_3_2 || !d2_4_1", "!d2_3_2 || !d2_4_2", "!d2_3_3 || !d2_3_4",
         "!d2_3_3 || !d2_4_3", "!d2_3_3 || !d2_4_4", "!d2_3_4 || !d2_4_3",
         "!d2_3_4 || !d2_4_4", "!d2_4_1 || !d2_4_2", "!d2_4_3 || !d2_4_4",
         "!d3_1_1 || !d3_1_2", "!d3_1_1 || !d3_2_1", "!d3_1_1 || !d3_2_2",
         "!d3_1_2 || !d3_2_1", "!d3_1_2 || !d3_2_2", "!d3_1_3 || !d3_1_4",
         "!d3_1_3 || !d3_2_3", "!d3_1_3 || !d3_2_4", "!d3_1_4 || !d3_2_3",
         "!d3_1_4 || !d3_2_4", "!d3_2_1 || !d3_2_2", "!d3_2_3 || !d3_2_4",
         "!d3_3_1 || !d3_3_2", "!d3_3_1 || !d3_4_1", "!d3_3_1 || !d3_4_2",
         "!d3_3_2 || !d3_4_1", "!d3_3_2 || !d3_4_2", "!d3_3_3 || !d3_3_4",
         "!d3_3_3 || !d3_4_3", "!d3_3_3 || !d3_4_4", "!d3_3_4 || !d3_4_3",
         "!d3_3_4 || !d3_4_4", "!d3_4_1 || !d3_4_2", "!d3_4_3 || !d3_4_4",
         "!d4_1_1 || !d4_1_2", "!d4_1_1 || !d4_2_1", "!d4_1_1 || !d4_2_2",
         "!d4_1_2 || !d4_2_1", "!d4_1_2 || !d4_2_2", "!d4_1_3 || !d4_1_4",
         "!d4_1_3 || !d4_2_3", "!d4_1_3 || !d4_2_4", "!d4_1_4 || !d4_2_3",
         "!d4_1_4 || !d4_2_4", "!d4_2_1 || !d4_2_2", "!d4_2_3 || !d4_2_4",
         "!d4_3_1 || !d4_3_2", "!d4_3_1 || !d4_4_1", "!d4_3_1 || !d4_4_2",
         "!d4_3_2 || !d4_4_1", "!d4_3_2 || !d4_4_2", "!d4_3_3 || !d4_3_4",
         "!d4_3_3 || !d4_4_3", "!d4_3_3 || !d4_4_4", "!d4_3_4 || !d4_4_3",
         "!d4_3_4 || !d4_4_4", "!d4_4_1 || !d4_4_2", "!d4_4_3 || !d4_4_4",
         "d1_1_1 || d1_1_2 || d1_2_1 || d1_2_2",
         "d1_1_3 || d1_1_4 || d1_2_3 || d1_2_4",
         "d1_3_1 || d1_3_2 || d1_4_1 || d1_4_2",
         "d1_3_3 || d1_3_4 || d1_4_3 || d1_4_4",
         "d2_1_1 || d2_1_2 || d2_2_1 || d2_2_2",
         "d2_1_3 || d2_1_4 || d2_2_3 || d2_2_4",
         "d2_3_1 || d2_3_2 || d2_4_1 || d2_4_2",
         "d2_3_3 || d2_3_4 || d2_4_3 || d2_4_4",
         "d3_1_1 || d3_1_2 || d3_2_1 || d3_2_2",
         "d3_1_3 || d3_1_4 || d3_2_3 || d3_2_4",
         "d3_3_1 || d3_3_2 || d3_4_1 || d3_4_2",
         "d3_3_3 || d3_3_4 || d3_4_3 || d3_4_4",
         "d4_1_1 || d4_1_2 || d4_2_1 || d4_2_2",
         "d4_1_3 || d4_1_4 || d4_2_3 || d4_2_4",
         "d4_3_1 || d4_3_2 || d4_4_1 || d4_4_2",
         "d4_3_3 || d4_3_4 || d4_4_3 || d4_4_4"
     ]
     assert cnf == expected
Exemple #2
0
 def test_board(self):
     board = SudokuBoard([[0, 0, 0, 3], [0, 0, 0, 2], [3, 0, 0, 0],
                          [4, 0, 0, 0]])
     expected = "\n".join(["0003", "0002", "3000", "4000"])
     assert str(board) == expected
     expected = [[(1, 1), (1, 2), (1, 3), (1, 4)],
                 [(2, 1), (2, 2), (2, 3), (2, 4)],
                 [(3, 1), (3, 2), (3, 3), (3, 4)],
                 [(4, 1), (4, 2), (4, 3), (4, 4)]]
     assert board.rows() == expected
     expected = [[(1, 1), (2, 1), (3, 1), (4, 1)],
                 [(1, 2), (2, 2), (3, 2), (4, 2)],
                 [(1, 3), (2, 3), (3, 3), (4, 3)],
                 [(1, 4), (2, 4), (3, 4), (4, 4)]]
     assert board.columns() == expected
     expected = [[(1, 1), (1, 2), (2, 1), (2, 2)],
                 [(1, 3), (1, 4), (2, 3), (2, 4)],
                 [(3, 1), (3, 2), (4, 1), (4, 2)],
                 [(3, 3), (3, 4), (4, 3), (4, 4)]]
     assert board.zones() == expected