Beispiel #1
0
 def test_cnf(self):
     board0 = SudokuBoard([[0, 0, 0, 3], [0, 0, 0, 2], [3, 0, 0, 0], [4, 0, 0, 0]])
     expected =  ['!d1_1_1 || !d1_1_2',
                  '!d1_1_1 || !d1_1_3',
                  '!d1_1_1 || !d1_1_4',
                  '!d1_1_1 || !d1_2_1',
                  '!d1_1_1 || !d1_2_2',
                  '!d1_1_1 || !d1_3_1',
                  '!d1_1_1 || !d1_4_1',
                  '!d1_1_2 || !d1_1_3',
                  '!d1_1_2 || !d1_1_4',
                  '!d1_1_2 || !d1_2_1',
                  '!d1_1_2 || !d1_2_2',
                  '!d1_1_2 || !d1_3_2',
                  '!d1_1_2 || !d1_4_2',
                  '!d1_1_3 || !d1_1_4',
                  '!d1_1_3 || !d1_2_3',
                  '!d1_1_3 || !d1_2_4',
                  '!d1_1_3 || !d1_3_3',
                  '!d1_1_3 || !d1_4_3',
                  '!d1_1_4 || !d1_2_3',
                  '!d1_1_4 || !d1_2_4',
                  '!d1_1_4 || !d1_3_4',
                  '!d1_1_4 || !d1_4_4',
                  '!d1_2_1 || !d1_2_2',
                  '!d1_2_1 || !d1_2_3',
                  '!d1_2_1 || !d1_2_4',
                  '!d1_2_1 || !d1_3_1',
                  '!d1_2_1 || !d1_4_1',
                  '!d1_2_2 || !d1_2_3',
                  '!d1_2_2 || !d1_2_4',
                  '!d1_2_2 || !d1_3_2',
                  '!d1_2_2 || !d1_4_2',
                  '!d1_2_3 || !d1_2_4',
                  '!d1_2_3 || !d1_3_3',
                  '!d1_2_3 || !d1_4_3',
                  '!d1_2_4 || !d1_3_4',
                  '!d1_2_4 || !d1_4_4',
                  '!d1_3_1 || !d1_3_2',
                  '!d1_3_1 || !d1_3_3',
                  '!d1_3_1 || !d1_3_4',
                  '!d1_3_1 || !d1_4_1',
                  '!d1_3_1 || !d1_4_2',
                  '!d1_3_2 || !d1_3_3',
                  '!d1_3_2 || !d1_3_4',
                  '!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_1 || !d1_4_3',
                  '!d1_4_1 || !d1_4_4',
                  '!d1_4_2 || !d1_4_3',
                  '!d1_4_2 || !d1_4_4',
                  '!d1_4_3 || !d1_4_4',
                  '!d2_1_1 || !d2_1_2',
                  '!d2_1_1 || !d2_1_3',
                  '!d2_1_1 || !d2_1_4',
                  '!d2_1_1 || !d2_2_1',
                  '!d2_1_1 || !d2_2_2',
                  '!d2_1_1 || !d2_3_1',
                  '!d2_1_1 || !d2_4_1',
                  '!d2_1_2 || !d2_1_3',
                  '!d2_1_2 || !d2_1_4',
                  '!d2_1_2 || !d2_2_1',
                  '!d2_1_2 || !d2_2_2',
                  '!d2_1_2 || !d2_3_2',
                  '!d2_1_2 || !d2_4_2',
                  '!d2_1_3 || !d2_1_4',
                  '!d2_1_3 || !d2_2_3',
                  '!d2_1_3 || !d2_2_4',
                  '!d2_1_3 || !d2_3_3',
                  '!d2_1_3 || !d2_4_3',
                  '!d2_1_4 || !d2_2_3',
                  '!d2_1_4 || !d2_2_4',
                  '!d2_1_4 || !d2_3_4',
                  '!d2_1_4 || !d2_4_4',
                  '!d2_2_1 || !d2_2_2',
                  '!d2_2_1 || !d2_2_3',
                  '!d2_2_1 || !d2_2_4',
                  '!d2_2_1 || !d2_3_1',
                  '!d2_2_1 || !d2_4_1',
                  '!d2_2_2 || !d2_2_3',
                  '!d2_2_2 || !d2_2_4',
                  '!d2_2_2 || !d2_3_2',
                  '!d2_2_2 || !d2_4_2',
                  '!d2_2_3 || !d2_2_4',
                  '!d2_2_3 || !d2_3_3',
                  '!d2_2_3 || !d2_4_3',
                  '!d2_2_4 || !d2_3_4',
                  '!d2_2_4 || !d2_4_4',
                  '!d2_3_1 || !d2_3_2',
                  '!d2_3_1 || !d2_3_3',
                  '!d2_3_1 || !d2_3_4',
                  '!d2_3_1 || !d2_4_1',
                  '!d2_3_1 || !d2_4_2',
                  '!d2_3_2 || !d2_3_3',
                  '!d2_3_2 || !d2_3_4',
                  '!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_1 || !d2_4_3',
                  '!d2_4_1 || !d2_4_4',
                  '!d2_4_2 || !d2_4_3',
                  '!d2_4_2 || !d2_4_4',
                  '!d2_4_3 || !d2_4_4',
                  '!d3_1_1 || !d3_1_2',
                  '!d3_1_1 || !d3_1_3',
                  '!d3_1_1 || !d3_1_4',
                  '!d3_1_1 || !d3_2_1',
                  '!d3_1_1 || !d3_2_2',
                  '!d3_1_1 || !d3_3_1',
                  '!d3_1_1 || !d3_4_1',
                  '!d3_1_2 || !d3_1_3',
                  '!d3_1_2 || !d3_1_4',
                  '!d3_1_2 || !d3_2_1',
                  '!d3_1_2 || !d3_2_2',
                  '!d3_1_2 || !d3_3_2',
                  '!d3_1_2 || !d3_4_2',
                  '!d3_1_3 || !d3_1_4',
                  '!d3_1_3 || !d3_2_3',
                  '!d3_1_3 || !d3_2_4',
                  '!d3_1_3 || !d3_3_3',
                  '!d3_1_3 || !d3_4_3',
                  '!d3_1_4 || !d3_2_3',
                  '!d3_1_4 || !d3_2_4',
                  '!d3_1_4 || !d3_3_4',
                  '!d3_1_4 || !d3_4_4',
                  '!d3_2_1 || !d3_2_2',
                  '!d3_2_1 || !d3_2_3',
                  '!d3_2_1 || !d3_2_4',
                  '!d3_2_1 || !d3_3_1',
                  '!d3_2_1 || !d3_4_1',
                  '!d3_2_2 || !d3_2_3',
                  '!d3_2_2 || !d3_2_4',
                  '!d3_2_2 || !d3_3_2',
                  '!d3_2_2 || !d3_4_2',
                  '!d3_2_3 || !d3_2_4',
                  '!d3_2_3 || !d3_3_3',
                  '!d3_2_3 || !d3_4_3',
                  '!d3_2_4 || !d3_3_4',
                  '!d3_2_4 || !d3_4_4',
                  '!d3_3_1 || !d3_3_2',
                  '!d3_3_1 || !d3_3_3',
                  '!d3_3_1 || !d3_3_4',
                  '!d3_3_1 || !d3_4_1',
                  '!d3_3_1 || !d3_4_2',
                  '!d3_3_2 || !d3_3_3',
                  '!d3_3_2 || !d3_3_4',
                  '!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_1 || !d3_4_3',
                  '!d3_4_1 || !d3_4_4',
                  '!d3_4_2 || !d3_4_3',
                  '!d3_4_2 || !d3_4_4',
                  '!d3_4_3 || !d3_4_4',
                  '!d4_1_1 || !d4_1_2',
                  '!d4_1_1 || !d4_1_3',
                  '!d4_1_1 || !d4_1_4',
                  '!d4_1_1 || !d4_2_1',
                  '!d4_1_1 || !d4_2_2',
                  '!d4_1_1 || !d4_3_1',
                  '!d4_1_1 || !d4_4_1',
                  '!d4_1_2 || !d4_1_3',
                  '!d4_1_2 || !d4_1_4',
                  '!d4_1_2 || !d4_2_1',
                  '!d4_1_2 || !d4_2_2',
                  '!d4_1_2 || !d4_3_2',
                  '!d4_1_2 || !d4_4_2',
                  '!d4_1_3 || !d4_1_4',
                  '!d4_1_3 || !d4_2_3',
                  '!d4_1_3 || !d4_2_4',
                  '!d4_1_3 || !d4_3_3',
                  '!d4_1_3 || !d4_4_3',
                  '!d4_1_4 || !d4_2_3',
                  '!d4_1_4 || !d4_2_4',
                  '!d4_1_4 || !d4_3_4',
                  '!d4_1_4 || !d4_4_4',
                  '!d4_2_1 || !d4_2_2',
                  '!d4_2_1 || !d4_2_3',
                  '!d4_2_1 || !d4_2_4',
                  '!d4_2_1 || !d4_3_1',
                  '!d4_2_1 || !d4_4_1',
                  '!d4_2_2 || !d4_2_3',
                  '!d4_2_2 || !d4_2_4',
                  '!d4_2_2 || !d4_3_2',
                  '!d4_2_2 || !d4_4_2',
                  '!d4_2_3 || !d4_2_4',
                  '!d4_2_3 || !d4_3_3',
                  '!d4_2_3 || !d4_4_3',
                  '!d4_2_4 || !d4_3_4',
                  '!d4_2_4 || !d4_4_4',
                  '!d4_3_1 || !d4_3_2',
                  '!d4_3_1 || !d4_3_3',
                  '!d4_3_1 || !d4_3_4',
                  '!d4_3_1 || !d4_4_1',
                  '!d4_3_1 || !d4_4_2',
                  '!d4_3_2 || !d4_3_3',
                  '!d4_3_2 || !d4_3_4',
                  '!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_1 || !d4_4_3',
                  '!d4_4_1 || !d4_4_4',
                  '!d4_4_2 || !d4_4_3',
                  '!d4_4_2 || !d4_4_4',
                  '!d4_4_3 || !d4_4_4',
                 "d1_1_1 || d1_1_2 || d1_1_3 || d1_1_4",
                 "d1_1_1 || d1_1_2 || d1_2_1 || d1_2_2",
                 "d1_1_1 || d1_2_1 || d1_3_1 || d1_4_1",
                 "d1_1_1 || d2_1_1 || d3_1_1 || d4_1_1",
                 "d1_1_2 || d1_2_2 || d1_3_2 || d1_4_2",
                 "d1_1_2 || d2_1_2 || d3_1_2 || d4_1_2",
                 "d1_1_3 || d1_1_4 || d1_2_3 || d1_2_4",
                 "d1_1_3 || d1_2_3 || d1_3_3 || d1_4_3",
                 "d1_1_3 || d2_1_3 || d3_1_3 || d4_1_3",
                 "d1_1_4 || d1_2_4 || d1_3_4 || d1_4_4",
                 "d1_1_4 || d2_1_4 || d3_1_4 || d4_1_4",
                 "d1_2_1 || d1_2_2 || d1_2_3 || d1_2_4",
                 "d1_2_1 || d2_2_1 || d3_2_1 || d4_2_1",
                 "d1_2_2 || d2_2_2 || d3_2_2 || d4_2_2",
                 "d1_2_3 || d2_2_3 || d3_2_3 || d4_2_3",
                 "d1_2_4 || d2_2_4 || d3_2_4 || d4_2_4",
                 "d1_3_1 || d1_3_2 || d1_3_3 || d1_3_4",
                 "d1_3_1 || d1_3_2 || d1_4_1 || d1_4_2",
                 "d1_3_1 || d2_3_1 || d3_3_1 || d4_3_1",
                 "d1_3_2 || d2_3_2 || d3_3_2 || d4_3_2",
                 "d1_3_3 || d1_3_4 || d1_4_3 || d1_4_4",
                 "d1_3_3 || d2_3_3 || d3_3_3 || d4_3_3",
                 "d1_3_4 || d2_3_4 || d3_3_4 || d4_3_4",
                 "d1_4_1 || d1_4_2 || d1_4_3 || d1_4_4",
                 "d1_4_1 || d2_4_1 || d3_4_1 || d4_4_1",
                 "d1_4_2 || d2_4_2 || d3_4_2 || d4_4_2",
                 "d1_4_3 || d2_4_3 || d3_4_3 || d4_4_3",
                 "d1_4_4 || d2_4_4 || d3_4_4 || d4_4_4",
                 "d2_1_1 || d2_1_2 || d2_1_3 || d2_1_4",
                 "d2_1_1 || d2_1_2 || d2_2_1 || d2_2_2",
                 "d2_1_1 || d2_2_1 || d2_3_1 || d2_4_1",
                 "d2_1_2 || d2_2_2 || d2_3_2 || d2_4_2",
                 "d2_1_3 || d2_1_4 || d2_2_3 || d2_2_4",
                 "d2_1_3 || d2_2_3 || d2_3_3 || d2_4_3",
                 "d2_1_4 || d2_2_4 || d2_3_4 || d2_4_4",
                 "d2_2_1 || d2_2_2 || d2_2_3 || d2_2_4",
                 "d2_2_4",
                 "d2_3_1 || d2_3_2 || d2_3_3 || d2_3_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",
                 "d2_4_1 || d2_4_2 || d2_4_3 || d2_4_4",
                 "d3_1_1 || d3_1_2 || d3_1_3 || d3_1_4",
                 "d3_1_1 || d3_1_2 || d3_2_1 || d3_2_2",
                 "d3_1_1 || d3_2_1 || d3_3_1 || d3_4_1",
                 "d3_1_2 || d3_2_2 || d3_3_2 || d3_4_2",
                 "d3_1_3 || d3_1_4 || d3_2_3 || d3_2_4",
                 "d3_1_3 || d3_2_3 || d3_3_3 || d3_4_3",
                 "d3_1_4",
                 "d3_1_4 || d3_2_4 || d3_3_4 || d3_4_4",
                 "d3_2_1 || d3_2_2 || d3_2_3 || d3_2_4",
                 "d3_3_1",
                 "d3_3_1 || d3_3_2 || d3_3_3 || d3_3_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",
                 "d3_4_1 || d3_4_2 || d3_4_3 || d3_4_4",
                 "d4_1_1 || d4_1_2 || d4_1_3 || d4_1_4",
                 "d4_1_1 || d4_1_2 || d4_2_1 || d4_2_2",
                 "d4_1_1 || d4_2_1 || d4_3_1 || d4_4_1",
                 "d4_1_2 || d4_2_2 || d4_3_2 || d4_4_2",
                 "d4_1_3 || d4_1_4 || d4_2_3 || d4_2_4",
                 "d4_1_3 || d4_2_3 || d4_3_3 || d4_4_3",
                 "d4_1_4 || d4_2_4 || d4_3_4 || d4_4_4",
                 "d4_2_1 || d4_2_2 || d4_2_3 || d4_2_4",
                 "d4_3_1 || d4_3_2 || d4_3_3 || d4_3_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",
                 "d4_4_1",
                 "d4_4_1 || d4_4_2 || d4_4_3 || d4_4_4"]  
     assert '\n'.join(expected) == str(board0.cnf())
Beispiel #2
0
 def test_constraints(self):
     board0 = SudokuBoard([[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0],
                           [0, 0, 0, 0]])
     #cnf = sorted([str(c) for c in board0.cnf()])
     expected = [
         "!d1_1_1 || !d1_1_2", "!d1_1_1 || !d1_1_2", "!d1_1_1 || !d1_1_3",
         "!d1_1_1 || !d1_1_4", "!d1_1_1 || !d1_2_1", "!d1_1_1 || !d1_2_1",
         "!d1_1_1 || !d1_2_2", "!d1_1_1 || !d1_3_1", "!d1_1_1 || !d1_4_1",
         "!d1_1_2 || !d1_1_3", "!d1_1_2 || !d1_1_4", "!d1_1_2 || !d1_2_1",
         "!d1_1_2 || !d1_2_2", "!d1_1_2 || !d1_2_2", "!d1_1_2 || !d1_3_2",
         "!d1_1_2 || !d1_4_2", "!d1_1_3 || !d1_1_4", "!d1_1_3 || !d1_1_4",
         "!d1_1_3 || !d1_2_3", "!d1_1_3 || !d1_2_3", "!d1_1_3 || !d1_2_4",
         "!d1_1_3 || !d1_3_3", "!d1_1_3 || !d1_4_3", "!d1_1_4 || !d1_2_3",
         "!d1_1_4 || !d1_2_4", "!d1_1_4 || !d1_2_4", "!d1_1_4 || !d1_3_4",
         "!d1_1_4 || !d1_4_4", "!d1_2_1 || !d1_2_2", "!d1_2_1 || !d1_2_2",
         "!d1_2_1 || !d1_2_3", "!d1_2_1 || !d1_2_4", "!d1_2_1 || !d1_3_1",
         "!d1_2_1 || !d1_4_1", "!d1_2_2 || !d1_2_3", "!d1_2_2 || !d1_2_4",
         "!d1_2_2 || !d1_3_2", "!d1_2_2 || !d1_4_2", "!d1_2_3 || !d1_2_4",
         "!d1_2_3 || !d1_2_4", "!d1_2_3 || !d1_3_3", "!d1_2_3 || !d1_4_3",
         "!d1_2_4 || !d1_3_4", "!d1_2_4 || !d1_4_4", "!d1_3_1 || !d1_3_2",
         "!d1_3_1 || !d1_3_2", "!d1_3_1 || !d1_3_3", "!d1_3_1 || !d1_3_4",
         "!d1_3_1 || !d1_4_1", "!d1_3_1 || !d1_4_1", "!d1_3_1 || !d1_4_2",
         "!d1_3_2 || !d1_3_3", "!d1_3_2 || !d1_3_4", "!d1_3_2 || !d1_4_1",
         "!d1_3_2 || !d1_4_2", "!d1_3_2 || !d1_4_2", "!d1_3_3 || !d1_3_4",
         "!d1_3_3 || !d1_3_4", "!d1_3_3 || !d1_4_3", "!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_3_4 || !d1_4_4", "!d1_4_1 || !d1_4_2", "!d1_4_1 || !d1_4_2",
         "!d1_4_1 || !d1_4_3", "!d1_4_1 || !d1_4_4", "!d1_4_2 || !d1_4_3",
         "!d1_4_2 || !d1_4_4", "!d1_4_3 || !d1_4_4", "!d1_4_3 || !d1_4_4",
         "!d2_1_1 || !d2_1_2", "!d2_1_1 || !d2_1_2", "!d2_1_1 || !d2_1_3",
         "!d2_1_1 || !d2_1_4", "!d2_1_1 || !d2_2_1", "!d2_1_1 || !d2_2_1",
         "!d2_1_1 || !d2_2_2", "!d2_1_1 || !d2_3_1", "!d2_1_1 || !d2_4_1",
         "!d2_1_2 || !d2_1_3", "!d2_1_2 || !d2_1_4", "!d2_1_2 || !d2_2_1",
         "!d2_1_2 || !d2_2_2", "!d2_1_2 || !d2_2_2", "!d2_1_2 || !d2_3_2",
         "!d2_1_2 || !d2_4_2", "!d2_1_3 || !d2_1_4", "!d2_1_3 || !d2_1_4",
         "!d2_1_3 || !d2_2_3", "!d2_1_3 || !d2_2_3", "!d2_1_3 || !d2_2_4",
         "!d2_1_3 || !d2_3_3", "!d2_1_3 || !d2_4_3", "!d2_1_4 || !d2_2_3",
         "!d2_1_4 || !d2_2_4", "!d2_1_4 || !d2_2_4", "!d2_1_4 || !d2_3_4",
         "!d2_1_4 || !d2_4_4", "!d2_2_1 || !d2_2_2", "!d2_2_1 || !d2_2_2",
         "!d2_2_1 || !d2_2_3", "!d2_2_1 || !d2_2_4", "!d2_2_1 || !d2_3_1",
         "!d2_2_1 || !d2_4_1", "!d2_2_2 || !d2_2_3", "!d2_2_2 || !d2_2_4",
         "!d2_2_2 || !d2_3_2", "!d2_2_2 || !d2_4_2", "!d2_2_3 || !d2_2_4",
         "!d2_2_3 || !d2_2_4", "!d2_2_3 || !d2_3_3", "!d2_2_3 || !d2_4_3",
         "!d2_2_4 || !d2_3_4", "!d2_2_4 || !d2_4_4", "!d2_3_1 || !d2_3_2",
         "!d2_3_1 || !d2_3_2", "!d2_3_1 || !d2_3_3", "!d2_3_1 || !d2_3_4",
         "!d2_3_1 || !d2_4_1", "!d2_3_1 || !d2_4_1", "!d2_3_1 || !d2_4_2",
         "!d2_3_2 || !d2_3_3", "!d2_3_2 || !d2_3_4", "!d2_3_2 || !d2_4_1",
         "!d2_3_2 || !d2_4_2", "!d2_3_2 || !d2_4_2", "!d2_3_3 || !d2_3_4",
         "!d2_3_3 || !d2_3_4", "!d2_3_3 || !d2_4_3", "!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_3_4 || !d2_4_4", "!d2_4_1 || !d2_4_2", "!d2_4_1 || !d2_4_2",
         "!d2_4_1 || !d2_4_3", "!d2_4_1 || !d2_4_4", "!d2_4_2 || !d2_4_3",
         "!d2_4_2 || !d2_4_4", "!d2_4_3 || !d2_4_4", "!d2_4_3 || !d2_4_4",
         "!d3_1_1 || !d3_1_2", "!d3_1_1 || !d3_1_2", "!d3_1_1 || !d3_1_3",
         "!d3_1_1 || !d3_1_4", "!d3_1_1 || !d3_2_1", "!d3_1_1 || !d3_2_1",
         "!d3_1_1 || !d3_2_2", "!d3_1_1 || !d3_3_1", "!d3_1_1 || !d3_4_1",
         "!d3_1_2 || !d3_1_3", "!d3_1_2 || !d3_1_4", "!d3_1_2 || !d3_2_1",
         "!d3_1_2 || !d3_2_2", "!d3_1_2 || !d3_2_2", "!d3_1_2 || !d3_3_2",
         "!d3_1_2 || !d3_4_2", "!d3_1_3 || !d3_1_4", "!d3_1_3 || !d3_1_4",
         "!d3_1_3 || !d3_2_3", "!d3_1_3 || !d3_2_3", "!d3_1_3 || !d3_2_4",
         "!d3_1_3 || !d3_3_3", "!d3_1_3 || !d3_4_3", "!d3_1_4 || !d3_2_3",
         "!d3_1_4 || !d3_2_4", "!d3_1_4 || !d3_2_4", "!d3_1_4 || !d3_3_4",
         "!d3_1_4 || !d3_4_4", "!d3_2_1 || !d3_2_2", "!d3_2_1 || !d3_2_2",
         "!d3_2_1 || !d3_2_3", "!d3_2_1 || !d3_2_4", "!d3_2_1 || !d3_3_1",
         "!d3_2_1 || !d3_4_1", "!d3_2_2 || !d3_2_3", "!d3_2_2 || !d3_2_4",
         "!d3_2_2 || !d3_3_2", "!d3_2_2 || !d3_4_2", "!d3_2_3 || !d3_2_4",
         "!d3_2_3 || !d3_2_4", "!d3_2_3 || !d3_3_3", "!d3_2_3 || !d3_4_3",
         "!d3_2_4 || !d3_3_4", "!d3_2_4 || !d3_4_4", "!d3_3_1 || !d3_3_2",
         "!d3_3_1 || !d3_3_2", "!d3_3_1 || !d3_3_3", "!d3_3_1 || !d3_3_4",
         "!d3_3_1 || !d3_4_1", "!d3_3_1 || !d3_4_1", "!d3_3_1 || !d3_4_2",
         "!d3_3_2 || !d3_3_3", "!d3_3_2 || !d3_3_4", "!d3_3_2 || !d3_4_1",
         "!d3_3_2 || !d3_4_2", "!d3_3_2 || !d3_4_2", "!d3_3_3 || !d3_3_4",
         "!d3_3_3 || !d3_3_4", "!d3_3_3 || !d3_4_3", "!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_3_4 || !d3_4_4", "!d3_4_1 || !d3_4_2", "!d3_4_1 || !d3_4_2",
         "!d3_4_1 || !d3_4_3", "!d3_4_1 || !d3_4_4", "!d3_4_2 || !d3_4_3",
         "!d3_4_2 || !d3_4_4", "!d3_4_3 || !d3_4_4", "!d3_4_3 || !d3_4_4",
         "!d4_1_1 || !d4_1_2", "!d4_1_1 || !d4_1_2", "!d4_1_1 || !d4_1_3",
         "!d4_1_1 || !d4_1_4", "!d4_1_1 || !d4_2_1", "!d4_1_1 || !d4_2_1",
         "!d4_1_1 || !d4_2_2", "!d4_1_1 || !d4_3_1", "!d4_1_1 || !d4_4_1",
         "!d4_1_2 || !d4_1_3", "!d4_1_2 || !d4_1_4", "!d4_1_2 || !d4_2_1",
         "!d4_1_2 || !d4_2_2", "!d4_1_2 || !d4_2_2", "!d4_1_2 || !d4_3_2",
         "!d4_1_2 || !d4_4_2", "!d4_1_3 || !d4_1_4", "!d4_1_3 || !d4_1_4",
         "!d4_1_3 || !d4_2_3", "!d4_1_3 || !d4_2_3", "!d4_1_3 || !d4_2_4",
         "!d4_1_3 || !d4_3_3", "!d4_1_3 || !d4_4_3", "!d4_1_4 || !d4_2_3",
         "!d4_1_4 || !d4_2_4", "!d4_1_4 || !d4_2_4", "!d4_1_4 || !d4_3_4",
         "!d4_1_4 || !d4_4_4", "!d4_2_1 || !d4_2_2", "!d4_2_1 || !d4_2_2",
         "!d4_2_1 || !d4_2_3", "!d4_2_1 || !d4_2_4", "!d4_2_1 || !d4_3_1",
         "!d4_2_1 || !d4_4_1", "!d4_2_2 || !d4_2_3", "!d4_2_2 || !d4_2_4",
         "!d4_2_2 || !d4_3_2", "!d4_2_2 || !d4_4_2", "!d4_2_3 || !d4_2_4",
         "!d4_2_3 || !d4_2_4", "!d4_2_3 || !d4_3_3", "!d4_2_3 || !d4_4_3",
         "!d4_2_4 || !d4_3_4", "!d4_2_4 || !d4_4_4", "!d4_3_1 || !d4_3_2",
         "!d4_3_1 || !d4_3_2", "!d4_3_1 || !d4_3_3", "!d4_3_1 || !d4_3_4",
         "!d4_3_1 || !d4_4_1", "!d4_3_1 || !d4_4_1", "!d4_3_1 || !d4_4_2",
         "!d4_3_2 || !d4_3_3", "!d4_3_2 || !d4_3_4", "!d4_3_2 || !d4_4_1",
         "!d4_3_2 || !d4_4_2", "!d4_3_2 || !d4_4_2", "!d4_3_3 || !d4_3_4",
         "!d4_3_3 || !d4_3_4", "!d4_3_3 || !d4_4_3", "!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_3_4 || !d4_4_4", "!d4_4_1 || !d4_4_2", "!d4_4_1 || !d4_4_2",
         "!d4_4_1 || !d4_4_3", "!d4_4_1 || !d4_4_4", "!d4_4_2 || !d4_4_3",
         "!d4_4_2 || !d4_4_4", "!d4_4_3 || !d4_4_4", "!d4_4_3 || !d4_4_4",
         "d1_1_1 || d1_1_2 || d1_1_3 || d1_1_4",
         "d1_1_1 || d1_1_2 || d1_2_1 || d1_2_2",
         "d1_1_1 || d1_2_1 || d1_3_1 || d1_4_1",
         "d1_1_1 || d2_1_1 || d3_1_1 || d4_1_1",
         "d1_1_2 || d1_2_2 || d1_3_2 || d1_4_2",
         "d1_1_2 || d2_1_2 || d3_1_2 || d4_1_2",
         "d1_1_3 || d1_1_4 || d1_2_3 || d1_2_4",
         "d1_1_3 || d1_2_3 || d1_3_3 || d1_4_3",
         "d1_1_3 || d2_1_3 || d3_1_3 || d4_1_3",
         "d1_1_4 || d1_2_4 || d1_3_4 || d1_4_4",
         "d1_1_4 || d2_1_4 || d3_1_4 || d4_1_4",
         "d1_2_1 || d1_2_2 || d1_2_3 || d1_2_4",
         "d1_2_1 || d2_2_1 || d3_2_1 || d4_2_1",
         "d1_2_2 || d2_2_2 || d3_2_2 || d4_2_2",
         "d1_2_3 || d2_2_3 || d3_2_3 || d4_2_3",
         "d1_2_4 || d2_2_4 || d3_2_4 || d4_2_4",
         "d1_3_1 || d1_3_2 || d1_3_3 || d1_3_4",
         "d1_3_1 || d1_3_2 || d1_4_1 || d1_4_2",
         "d1_3_1 || d2_3_1 || d3_3_1 || d4_3_1",
         "d1_3_2 || d2_3_2 || d3_3_2 || d4_3_2",
         "d1_3_3 || d1_3_4 || d1_4_3 || d1_4_4",
         "d1_3_3 || d2_3_3 || d3_3_3 || d4_3_3",
         "d1_3_4 || d2_3_4 || d3_3_4 || d4_3_4",
         "d1_4_1 || d1_4_2 || d1_4_3 || d1_4_4",
         "d1_4_1 || d2_4_1 || d3_4_1 || d4_4_1",
         "d1_4_2 || d2_4_2 || d3_4_2 || d4_4_2",
         "d1_4_3 || d2_4_3 || d3_4_3 || d4_4_3",
         "d1_4_4 || d2_4_4 || d3_4_4 || d4_4_4",
         "d2_1_1 || d2_1_2 || d2_1_3 || d2_1_4",
         "d2_1_1 || d2_1_2 || d2_2_1 || d2_2_2",
         "d2_1_1 || d2_2_1 || d2_3_1 || d2_4_1",
         "d2_1_2 || d2_2_2 || d2_3_2 || d2_4_2",
         "d2_1_3 || d2_1_4 || d2_2_3 || d2_2_4",
         "d2_1_3 || d2_2_3 || d2_3_3 || d2_4_3",
         "d2_1_4 || d2_2_4 || d2_3_4 || d2_4_4",
         "d2_2_1 || d2_2_2 || d2_2_3 || d2_2_4",
         "d2_3_1 || d2_3_2 || d2_3_3 || d2_3_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",
         "d2_4_1 || d2_4_2 || d2_4_3 || d2_4_4",
         "d3_1_1 || d3_1_2 || d3_1_3 || d3_1_4",
         "d3_1_1 || d3_1_2 || d3_2_1 || d3_2_2",
         "d3_1_1 || d3_2_1 || d3_3_1 || d3_4_1",
         "d3_1_2 || d3_2_2 || d3_3_2 || d3_4_2",
         "d3_1_3 || d3_1_4 || d3_2_3 || d3_2_4",
         "d3_1_3 || d3_2_3 || d3_3_3 || d3_4_3",
         "d3_1_4 || d3_2_4 || d3_3_4 || d3_4_4",
         "d3_2_1 || d3_2_2 || d3_2_3 || d3_2_4",
         "d3_3_1 || d3_3_2 || d3_3_3 || d3_3_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",
         "d3_4_1 || d3_4_2 || d3_4_3 || d3_4_4",
         "d4_1_1 || d4_1_2 || d4_1_3 || d4_1_4",
         "d4_1_1 || d4_1_2 || d4_2_1 || d4_2_2",
         "d4_1_1 || d4_2_1 || d4_3_1 || d4_4_1",
         "d4_1_2 || d4_2_2 || d4_3_2 || d4_4_2",
         "d4_1_3 || d4_1_4 || d4_2_3 || d4_2_4",
         "d4_1_3 || d4_2_3 || d4_3_3 || d4_4_3",
         "d4_1_4 || d4_2_4 || d4_3_4 || d4_4_4",
         "d4_2_1 || d4_2_2 || d4_2_3 || d4_2_4",
         "d4_3_1 || d4_3_2 || d4_3_3 || d4_3_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",
         "d4_4_1 || d4_4_2 || d4_4_3 || d4_4_4"
     ]
     assert '\n'.join(expected) == str(board0.cnf())