Пример #1
0
def forward_checking(assignments):
    assigned = [i for i in assignments if isinstance(assignments[i], int)]

    for x, y in assigned:
        for pos in assignments:
            if pos in assigned:
                continue

            if pos[0] == x:
                try:
                    assignments[pos].remove(assignments[(x, y)])
                except ValueError:
                    pass

            if pos[1] == y:
                try:
                    assignments[pos].remove(assignments[(x, y)])
                except ValueError:
                    pass

            region = SudokuBoard.get_region((x, y))
            if pos in SudokuBoard.get_positions(region):
                try:
                    assignments[pos].remove(assignments[(x, y)])
                except ValueError:
                    pass
Пример #2
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
Пример #3
0
 def test_contents1(self):
     board = SudokuBoard([[0, 0, 0, 3], 
                          [0, 0, 0, 2], 
                          [3, 0, 0, 0], 
                          [4, 0, 0, 0]])
     expected = { cnf.c('d3_1_4'), 
                  cnf.c('d2_2_4'), 
                  cnf.c('d3_3_1'), 
                  cnf.c('d4_4_1') }
     assert set(board.contents()) == expected
Пример #4
0
 def get_board(self):
     matrices = [box.as_matrix() for box in self.boxes]
     row1 = matrices[0][0] + matrices[1][0]
     row2 = matrices[0][1] + matrices[1][1]
     row3 = matrices[2][0] + matrices[3][0]
     row4 = matrices[2][1] + matrices[3][1]
     return SudokuBoard([row1, row2, row3, row4])
Пример #5
0
def main():

    # Process command line args
    parser = argparse.ArgumentParser(description="Sudoku Solver args",
                                     usage="Usage: {} "
                                     "<puzzle file name>".format(
                                         os.path.split(sys.argv[0])[1]),
                                     prog=os.path.split(sys.argv[0])[1])
    parser.add_argument('--debug',
                        dest='debug',
                        default=False,
                        action='store_true')
    parser.add_argument('file_name')
    args = parser.parse_args()

    file_name = args.file_name
    with open(file_name) as puzzle_file:
        # Read nine lines
        data = [puzzle_file.readline().strip() for i in range(9)]
    puzzle = SudokuBoard(itertools.chain(*data))
    print('PUZZLE:')
    print(puzzle)
    print()

    if sudokusolver.solve(puzzle, args.debug):
        print('SOLUTION:')
        print(puzzle)
    else:
        print('Could not find a solution')
Пример #6
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
Пример #7
0
 def test_solve(self):
     board = SudokuBoard([[0, 0, 0, 3], [0, 0, 0, 2], [3, 0, 0, 0],
                          [4, 0, 0, 0]])
     solved = board.solve(SearchSolver())
     expected = '\n'.join(['2413', '1342', '3124', '4231'])
     assert str(solved) == expected
Пример #8
0
from sudoku import SudokuBoard
from boardui import BoardGUI
import tkinter as tk
from strategy import StrategyMk1, StrategyMk2, StrategyMk3
from newstrat import strategymk4
import utilities

board = utilities.generate_puzzle_matrix(3)
game = SudokuBoard(board, 3)

window = tk.Tk()
BoardGUI(window,game )


tk.mainloop()


Пример #9
0
#!/usr/bin/python

from sudoku import SudokuBoard
boards = ["board" + str(i) + ".txt" for i in range(1,6)]
for fn in boards:
  print("============ " + fn + ":")
  board = SudokuBoard(fn)
  print("Before:")
  board.printBoard()
  result = board.AC_3(False)
  print("\nAfter AC-3:")
  board.printBoard()
  print("Solved: " + str(board.isSolved()))

  print("\nAfter AC-3 with extra inference:")
  board = SudokuBoard(fn)
  result = board.AC_3(True)
  board.printBoard()
  print("Solved: " + str(board.isSolved()))

Пример #10
0
 def test_get_initial_list(self):
     board = SudokuBoard(9)
     expected_result = [1, 2, 3, 4, 5, 6, 7, 8, 9]
     self.assertEqual(board._get_initial_list(), expected_result)
Пример #11
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())
Пример #12
0
#!/usr/bin/python
import sys
import pygame
from sudoku import SudokuBoard

width = 542
height = 600
step = width / 9
pygame.init()
pygame.font.init()
window = pygame.display.set_mode((width, height))

myboard = SudokuBoard()
while myboard.gameOn:
    myboard.boardEvents()
Пример #13
0
                    assignments[pos].remove(assignments[(x, y)])
                except ValueError:
                    pass


if __name__ == '__main__':
    board = ("0 7 0 4 0 0 3 0 0\n"
             "0 0 0 0 9 0 1 2 0\n"
             "0 0 0 7 0 0 0 0 5\n"
             "0 0 9 2 0 0 0 0 8\n"
             "8 0 0 6 0 9 0 0 4\n"
             "7 0 0 0 0 8 9 0 0\n"
             "3 0 0 0 0 5 0 0 0\n"
             "0 2 5 0 4 0 0 0 0\n"
             "0 0 7 0 0 3 0 6 0\n")

    sudoku = SudokuBoard(board)
    assignments = sudoku.get_board()

    for i in product(range(1, 10), range(1, 10)):
        if i not in assignments:
            assignments[i] = range(1, 10)
    forward_checking(assignments)

    result = search(sudoku, assignments)

    if result is None:
        print ''
    else:
        print result
Пример #14
0
#!/usr/bin/python
import sys
from sudoku import SudokuBoard

class WritableObject:
    def __init__(self):
        self.content = ""
    def write(self, string):
        self.content = self.content + string

boardObj = SudokuBoard('sudoku-board.txt')

output = WritableObject()
sys.stdout = output
boardObj.printBoard()
sys.stdout = sys.__stdout__
assert(output.content == "* 1 *  |  4 2 *  |  * * 5\n* * 2  |  * 7 1  |  * 3 9\n* * *  |  * * *  |  * 4 *\n-------+---------+-------\n2 * 7  |  1 * *  |  * * 6\n* * *  |  * 4 *  |  * * *\n6 * *  |  * * 7  |  4 * 3\n-------+---------+-------\n* 7 *  |  * * *  |  * * *\n1 2 *  |  7 3 *  |  5 * *\n3 * *  |  * 8 2  |  * 7 *\n")

constraints = boardObj.getConstraintSets((1,0))
unuseds = []
for i in range(0,3):
    unuseds.append(boardObj.computeUnusedNums(constraints[i]))
assert(set([4,5,6,8]) in unuseds)
assert(set([4,5,7,8,9]) in unuseds)
assert(set(range(3,10)) in unuseds)
assert(len(unuseds) == 3)

assert(not boardObj.isSolved())

print 'All tests passed'
Пример #15
0
 def test_get_playable_board(self):
     """should not equal board"""
     board = SudokuBoard(9)
     playable_board = board.get_playable_board()
     self.assertNotEqual(playable_board, board.board)
Пример #16
0
 def test_get_full_board(self):
     board = SudokuBoard(4).get_full_board()
     non_expected_result = [[1, 2, 3, 4], [2, 3, 4, 1], [3, 4, 1, 2],
                            [4, 1, 2, 3]]
     self.assertNotEqual(board, non_expected_result)
Пример #17
0
 def test_get_initial_matrix(self):
     board = SudokuBoard(4).get_initial_matrix()
     expected_result = [[1, 2, 3, 4], [2, 3, 4, 1], [3, 4, 1, 2],
                        [4, 1, 2, 3]]
     self.assertEqual(board, expected_result)
Пример #18
0
 def test_board_list(self):
     board = SudokuBoard(16)
     expected_result = [
         1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G'
     ]
     self.assertEqual(board.board_list, expected_result)
Пример #19
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())
Пример #20
0
def solve2(boards):
    for n, board in enumerate(boards):
        print(n)
        game = SudokuBoard(board, n)
        strat = StrategyMk2(game)
        strat.solve()
Пример #21
0
 def test_sat2(self):
     board = SudokuBoard([[1]])
     assert board.solvable(full_resolution)
 def test_solve2(self):
     board = SudokuBoard([[4, 1, 2, 3], [2, 3, 4, 1], [3, 4, 1, 2],
                          [0, 0, 0, 0]])
     solved = board.solve()
     expected = '\n'.join(['4123', '2341', '3412', '1234'])
     assert str(solved) == expected
Пример #23
0
 def test_contents2(self):
     board = SudokuBoard([[0, 0, 0, 0], 
                          [0, 0, 0, 0], 
                          [0, 0, 0, 0], 
                          [0, 0, 0, 0]])
     assert set(board.contents()) == set()
 def test_solve4(self):
     board = SudokuBoard([[2, 0, 0, 3], [0, 0, 0, 2], [0, 3, 1, 0],
                          [4, 0, 0, 0]])
     assert board.solve() == None
Пример #25
0
 def test_sat1(self):
     board = SudokuBoard([[0, 0, 0, 3], 
                          [0, 0, 0, 2], 
                          [3, 0, 0, 0], 
                          [4, 0, 4, 4]])
     assert not board.solvable(full_resolution)
Пример #26
0
#!/usr/bin/python
import sys
import math
from sudoku import SudokuBoard

class WritableObject:
    def __init__(self):
        self.content = ""
    def write(self, string):
        self.content = self.content + string

boardObj = SudokuBoard('medium.txt')

output = WritableObject()
boardObj.printBoard()

boardObj.runBFS()
#boardObj.runDFS()
#boardObj.runModifiedBFS()
#boardObj.runModifiedDFS()

while True :
    boardObj = SudokuBoard('medium.txt')
    boardObj.runSimulatedAnnealing(10000, .85)

print out