コード例 #1
0
    def test_Puzzle_isValid(self):
         validPuzzle = sudoku.Puzzle(
             [sudoku.Square([4,3,5,6,8,2,1,9,7]),
              sudoku.Square([2,6,9,5,7,1,8,3,4]),
              sudoku.Square([7,8,1,4,9,3,5,6,2]),
              sudoku.Square([8,2,6,3,7,4,9,5,1]),
              sudoku.Square([1,9,5,6,8,2,7,4,3]),
              sudoku.Square([3,4,7,9,1,5,6,2,8]),
              sudoku.Square([5,1,9,2,4,8,7,6,3]),
              sudoku.Square([3,2,6,9,5,7,4,1,8]),
              sudoku.Square([8,7,4,1,3,6,2,5,9])])
         self.assertTrue(validPuzzle.isValid())

         validPuzzleWithUnknowns = sudoku.Puzzle(
             [sudoku.Square([4,3,5,6,8,2,1,'?',7]),
              sudoku.Square([2,6,9,5,7,1,8,'?',4]),
              sudoku.Square([7,8,1,4,9,3,5,6,2]),
              sudoku.Square([8,2,6,3,7,4,9,5,1]),
              sudoku.Square([1,9,5,6,8,2,7,4,3]),
              sudoku.Square([3,4,7,9,1,5,6,2,8]),
              sudoku.Square([5,1,9,2,4,8,7,6,3]),
              sudoku.Square([3,2,6,9,5,7,4,1,8]),
              sudoku.Square([8,7,4,1,3,6,2,5,9])])
         self.assertTrue(validPuzzleWithUnknowns.isValid())

         validPuzzleAllUnkowns = sudoku.Puzzle(
             [sudoku.Square(['?','?','?','?','?','?','?','?','?']),
              sudoku.Square(['?','?','?','?','?','?','?','?','?']),
              sudoku.Square(['?','?','?','?','?','?','?','?','?']),
              sudoku.Square(['?','?','?','?','?','?','?','?','?']),
              sudoku.Square(['?','?','?','?','?','?','?','?','?']),
              sudoku.Square(['?','?','?','?','?','?','?','?','?']),
              sudoku.Square(['?','?','?','?','?','?','?','?','?']),
              sudoku.Square(['?','?','?','?','?','?','?','?','?']),
              sudoku.Square(['?','?','?','?','?','?','?','?','?'])])
         self.assertTrue(validPuzzleWithUnknowns.isValid())

         invalidPuzzle = sudoku.Puzzle(
             [sudoku.Square([4,4,5,6,8,2,1,9,7]), # Two 4's in one square!
              sudoku.Square([2,6,9,5,7,1,8,3,4]),
              sudoku.Square([7,8,1,4,9,3,5,6,2]),
              sudoku.Square([8,2,6,3,7,4,9,5,1]),
              sudoku.Square([1,9,5,6,8,2,7,4,3]),
              sudoku.Square([3,4,7,9,1,5,6,2,8]),
              sudoku.Square([5,1,9,2,4,8,7,6,3]),
              sudoku.Square([3,2,6,9,5,7,4,1,8]),
              sudoku.Square([8,7,4,1,3,6,2,5,9])])
         self.assertFalse(invalidPuzzle.isValid())
コード例 #2
0
ファイル: solver.py プロジェクト: captainalan/sudoku-solver
def solveSudokuPuzzle(puzzle):
    """Function returns solved puzzle.""" 
    # Check if argument is a valid puzzle
    if not puzzle.isValid():
        raise ValueError("Puzzle is no bueno!")

    # Find positions of unknowns.
    unknowns = []
    for index, val in enumerate(puzzle.toList()): # Testing!
        if val == '?':
            unknowns.append(index)
        continue

    # Now brute force solve for those unknowns!
    """Some improvements to make later:
    - Dont try all possible ints, look at the Square the unknown 
      is in and skip testing those values that are definitely
      not the case.
    """

    # RANDOM APPROACH.
    solved = False
    while not solved:
        attempt_list = puzzle.toList()
        for u in unknowns:
            attempt_list[u] = random.randint(1,9)
        attempt = sudoku.Puzzle(attempt_list, isListOfInts=True)
        if attempt.isSolved():
            return attempt

    print(unknowns) # Does it work?

    return "foo"
コード例 #3
0
ファイル: game.py プロジェクト: drongh/sudoku-qml
 def __init__(self):
     super(Game, self).__init__()
     self.setup_mode = False
     self._puzzle = su.Puzzle()
     self._cells = []
     for square in self._puzzle.squares:
         cell = Cell(self, square)
         self._cells.append(cell)
コード例 #4
0
def test_Puzzle_setup_random_grid_80():
    p = su.Puzzle()
    p.setup_random_grid(80)
    #    assert p.is_solved
    assert len(p.assigned_grid) == 81
    assert len(p.current_grid) == 81
    assert len(p.solved_grid) == 81
    all_solutions = list(su.solve(p.assigned_grid))
    assert len(all_solutions) == 1
    assert all_solutions[0] == p.solved_grid
コード例 #5
0
    def testSolver(self):
        solution = sudoku.Puzzle(
             [sudoku.Square([4,3,5,6,8,2,1,9,7]),
              sudoku.Square([2,6,9,5,7,1,8,3,4]),
              sudoku.Square([7,8,1,4,9,3,5,6,2]),
              sudoku.Square([8,2,6,3,7,4,9,5,1]),
              sudoku.Square([1,9,5,6,8,2,7,4,3]),
              sudoku.Square([3,4,7,9,1,5,6,2,8]),
              sudoku.Square([5,1,9,2,4,8,7,6,3]),
              sudoku.Square([3,2,6,9,5,7,4,1,8]),
              sudoku.Square([8,7,4,1,3,6,2,5,9])])

        hasTwoUnknownsPuzzle = sudoku.Puzzle(
             [sudoku.Square(['?',3,5,6,8,2,1,9,'?']),
              sudoku.Square([2,6,9,5,7,1,8,3,4]),
              sudoku.Square([7,8,1,4,9,3,5,6,2]),
              sudoku.Square([8,2,6,3,7,4,9,5,1]),
              sudoku.Square([1,9,5,6,8,2,7,4,3]),
              sudoku.Square([3,4,7,9,1,5,6,2,8]),
              sudoku.Square([5,1,9,2,4,8,7,6,3]),
              sudoku.Square([3,2,6,9,5,7,4,1,8]),
              sudoku.Square([8,7,4,1,3,6,2,5,9])])

        hasFiveUnknownsPuzzle = sudoku.Puzzle(
             [sudoku.Square(['?',3,5,6,8,2,1,9,'?']),
              sudoku.Square([2,6,9,5,7,1,8,3,4]),
              sudoku.Square([7,'?',1,4,9,3,5,6,2]),
              sudoku.Square([8,2,6,3,7,4,9,5,1]),
              sudoku.Square([1,9,5,6,8,2,7,4,3]),
              sudoku.Square([3,4,7,9,1,'?',6,2,8]),
              sudoku.Square([5,1,9,2,4,8,7,6,3]),
              sudoku.Square([3,2,6,'?',5,7,4,1,8]),
              sudoku.Square([8,7,4,1,3,6,2,5,9])])

        self.assertEqual(solver.solveSudokuPuzzle(hasTwoUnknownsPuzzle).toList(),
                         solution.toList())

        self.assertEqual(solver.solveSudokuPuzzle(hasFiveUnknownsPuzzle).toList(),
                         solution.toList())
コード例 #6
0
    def test_Puzzle_isSolved(self):

        solvedPuzzle = sudoku.Puzzle(
             [sudoku.Square([4,3,5,6,8,2,1,9,7]),
              sudoku.Square([2,6,9,5,7,1,8,3,4]),
              sudoku.Square([7,8,1,4,9,3,5,6,2]),
              sudoku.Square([8,2,6,3,7,4,9,5,1]),
              sudoku.Square([1,9,5,6,8,2,7,4,3]),
              sudoku.Square([3,4,7,9,1,5,6,2,8]),
              sudoku.Square([5,1,9,2,4,8,7,6,3]),
              sudoku.Square([3,2,6,9,5,7,4,1,8]),
              sudoku.Square([8,7,4,1,3,6,2,5,9])])
        self.assertTrue(solvedPuzzle.isSolved())

        badSolutionPuzzle = sudoku.Puzzle(
             [sudoku.Square([7,3,5,6,8,2,1,9,4]),
              sudoku.Square([2,6,9,5,7,1,8,3,4]),
              sudoku.Square([7,8,1,4,9,3,5,6,2]),
              sudoku.Square([8,2,6,3,7,4,9,5,1]),
              sudoku.Square([1,9,5,6,8,2,7,4,3]),
              sudoku.Square([3,4,7,9,1,5,6,2,8]),
              sudoku.Square([5,1,9,2,4,8,7,6,3]),
              sudoku.Square([3,2,6,9,5,7,4,1,8]),
              sudoku.Square([8,7,4,1,3,6,2,5,9])])
        self.assertFalse(badSolutionPuzzle.isSolved())

        hasUnknownsPuzzle = sudoku.Puzzle(
             [sudoku.Square(['?',3,5,6,8,2,1,9,'?']),
              sudoku.Square([2,6,9,5,7,1,8,3,4]),
              sudoku.Square([7,8,1,4,9,3,5,6,2]),
              sudoku.Square([8,2,6,3,7,4,9,5,1]),
              sudoku.Square([1,9,5,6,8,2,7,4,3]),
              sudoku.Square([3,4,7,9,1,5,6,2,8]),
              sudoku.Square([5,1,9,2,4,8,7,6,3]),
              sudoku.Square([3,2,6,9,5,7,4,1,8]),
              sudoku.Square([8,7,4,1,3,6,2,5,9])])
        self.assertFalse(hasUnknownsPuzzle.isSolved())
コード例 #7
0
 def test_solve(self):
     p = s.Puzzle()
     v: int = 0
     for x in range(0, 9):
         for y in range(0, 9):
             if (x % 3 == 0 and y == 0):
                 v = int(x / 3)
             self.assertTrue(p.set_position(x, y, v % 9 + 1))
             if (not (x == 8 and y == 8)):
                 self.assertFalse(p.is_solved())
             v = v + 1
         v = v + 3
     print()
     print(p)
     self.assertTrue(p.is_solved())
コード例 #8
0
ファイル: sudoku_test.py プロジェクト: divad417/sandbox
    def test_print(self):
        puzzle = sudoku.Puzzle([1, 0, 2] * 27)
        correct_output = '''-------------------------
| 1   2 | 1   2 | 1   2 |
| 1   2 | 1   2 | 1   2 |
| 1   2 | 1   2 | 1   2 |
-------------------------
| 1   2 | 1   2 | 1   2 |
| 1   2 | 1   2 | 1   2 |
| 1   2 | 1   2 | 1   2 |
-------------------------
| 1   2 | 1   2 | 1   2 |
| 1   2 | 1   2 | 1   2 |
| 1   2 | 1   2 | 1   2 |
-------------------------
'''
        self.assertEqual(str(puzzle), correct_output)
コード例 #9
0
            for pb, symmetric_break in problems:
                exp = Experiment(pb, solver=solver)
                exp.launch(None, timeout=300, symmetry_break=symmetric_break)
        
    if False:
        exp = Experiment('sudoku', solver=constraint.NMCSSolver(level=1))
        
        #exp = Experiment('nqueens', solver=constraint.BacktrackingSolver())
        #exp = Experiment('nqueens', solver = constraint.NRPA(level=1, playouts=100, iterative=True, heuristics=True))
        exp.launch(None, timeout=300, symmetry_break=False)

    if False:
        fixed = {8: 2, 9: 1, 16: 9, 17: 8, 18: 7, 15: 1, 19: 3, 20: 2, 22: 9, 25: 6, 28: 8, 29: 7, 34: 2, 50: 7, 43: 7, 38: 3, 37: 2, 42: 8, 46: 4, 47: 1, 58: 8, 65: 6, 73: 1, 66: 8, 69: 3, 76: 7, 81: 8}
        boxsize = 3
        
        puzzle = sudoku.Puzzle(fixed, boxsize, format = 'd')
        print(puzzle)
        
        solved = sudoku.solve(puzzle, model = 'CP')
        print(solved)
        
        solved_2 = sudoku.solve(puzzle, model = 'CP', solver=constraint.BacktrackingSolver())
        print(solved_2)
        
        solved_3 = sudoku.solve(puzzle, model = 'CP', solver=constraint.NMCSSolver(level=2))
        print(solved_3)
        
    if False:
        filename = '3_4'
        #filename = '3_3'
        puzzle = parser.parse_sudoku(filename)
コード例 #10
0
ファイル: sudoku_test.py プロジェクト: divad417/sandbox
 def test_row(self):
     puzzle = sudoku.Puzzle([1, 2, 3] * 27)
     self.assertEqual(puzzle.row(0), set(1, 2, 3))
コード例 #11
0
ファイル: sudoku_test.py プロジェクト: divad417/sandbox
 def test_index_by_tuple(self):
     puzzle = sudoku.Puzzle([1, 0, 3, 4, 5, 6, 7, 8, 9] * 9)
     self.assertEqual(puzzle[1, 1], 0)
     puzzle[1, 1] = 2
     self.assertEqual(puzzle[1, 1], 2)
コード例 #12
0
ファイル: sudoku_test.py プロジェクト: divad417/sandbox
 def test_col(self):
     puzzle = sudoku.Puzzle([1, 2, 3] * 27)
     self.assertEqual(puzzle.col(0), set(1))
コード例 #13
0
ファイル: main.py プロジェクト: jrich100/SudokuVision
import sudoku
import camera
import vision
import os
import numpy as np

#img_fn = os.getcwd() + "\\test_puzzle.jpg"
img_fn = "test_puzzle.png"

if __name__ == '__main__':

    print "--- Starting Sudoku Solver ---\n\n\n"

    puzzle_list = vision.find_puzzle(img_fn)
    print "Puzzle found\n"
    print np.reshape(puzzle_list, (9, 9))

    puzzle = sudoku.Puzzle(puzzle_list)
    puzzle.solve()

    puzzle.print_unsolved()
    puzzle.print_solved()

    print "Puzzle solved\n"

    #vision.overlay(img_fn, rect, answer)

    print "--- Finished ---"
コード例 #14
0
ファイル: sudoku_solve.py プロジェクト: divad417/sandbox
        5, 9, 0, 0, 0, 0, 0, 0, 0
    ]
}


def main(puzzle):
    # Try solving each method in turn, note sucesses
    solved = False
    while not solved:
        change = 0

        # Basic counting rules algorithm (elimination)
        puzzle, tmpchg = sudoku.basic_rules(puzzle)
        change += tmpchg

        # Placing values in cells algorithm
        puzzle, tmpchg = sudoku.place_values(puzzle)
        change += tmpchg

        if change == 0:
            break
        if np.all(puzzle != 0):
            solved = True

    print(puzzle)
    print(sudoku.message(solved))


if __name__ == '__main__':
    puzzle = sudoku.Puzzle(puzzles['Basic'])
    main(puzzle)
コード例 #15
0
ファイル: sudoku_test.py プロジェクト: divad417/sandbox
 def test_index_by_scalar(self):
     puzzle = sudoku.Puzzle([1, 2, 3, 4, 0, 6, 7, 8, 9] * 9)
     self.assertEqual(puzzle[4], 0)
     puzzle[4] = 5
     self.assertEqual(puzzle[4], 5)
コード例 #16
0
ファイル: sudoku_test.py プロジェクト: divad417/sandbox
 def test_iterator(self):
     puzzle = sudoku.Puzzle([1] * 81)
     self.assertEqual([i for i in puzzle], [1] * 81)
コード例 #17
0
ファイル: sudoku_test.py プロジェクト: divad417/sandbox
 def test_cell(self):
     puzzle = sudoku.Puzzle([1, 2, 3, 4, 5, 6, 7, 8, 9] * 9)
     self.assertEqual(puzzle.cell(4, 4), set(4, 5, 6))
コード例 #18
0
ファイル: sudoku_test.py プロジェクト: divad417/sandbox
 def test_options(self):
     puzzle = sudoku.Puzzle([0] * 81)
     puzzle[0, 3] = 1
     puzzle[3, 0] = 2
     puzzle[2, 2] = 3
     self.assertEqual(puzzle.options(0, 0), {4, 5, 6, 7, 8, 9})