Exemplo n.º 1
0
    def place(self, val):
        row, col = self.selected
        if self.cubes[row][col].value == 0:
            self.cubes[row][col].set(val)
            self.update_model()

        if valid(self.model, val, (row, col)) and solve(self.model):
            return True
        else:
            self.cubes[row][col].set(0)
            self.cubes[row][col].set_temp(0)
            self.update_model()
            return False
Exemplo n.º 2
0
def auto_solver():
	global board
	for y in range(9):
		for x in range(9):
			if board[y][x] == 0:
				for n in range(1, 10):
					if valid(board, n, (y, x)):
						board[y][x] = n
						auto_solver()
						board[y][x] = 0

				return

	display(board)
Exemplo n.º 3
0
    def place(self, val):
        """Places a specified value into the grid."""
        row, col = self.selected
        if self.cubes[row][col].value == 0:
            self.cubes[row][col].set(val)
            self.update_model()

            if valid(self.model, val, (row, col)):
                return True
            else:
                self.cubes[row][col].set(0)
                self.cubes[row][col].set_temp(0)
                self.update_model()
                return False
Exemplo n.º 4
0
    def place_value(self, val):
        row, col = self.selected  # get row and col of selected box

        if self.boxes[row][col].get_value() == 0:  # no value has been placed
            self.boxes[row][col].set_value(val)  # set box value to val
            self.update_model()  # update model

            if valid(self.model, val, (row, col)) or solve(
                    self.model):  # if value is valid for box and solved
                return True
            else:
                self.boxes[row][col].set_value(0)  # set value back to 0
                self.boxes[row][col].set_tmp(0)  # set tmp back to 0
                self.update_model()  # update model
                return False
Exemplo n.º 5
0
def solve(bo):
    find = solver.find_empty(bo)
    if not find:
        return True
    else:
        row, col = find
    for i in range(1, 10):
        if solver.valid(bo, i, (row, col)):
            bo[row][col] = i

            if solve(bo):
                return True

            bo[row][col] = 0
    return False
def solve(bo):
    find = find_empty(bo)
    if not find:
        return True
    else:
        row, col = find

    for i in range(1, 10):
        if valid(bo, i, find):
            bo[row][col] = i
            draw_val(i)

            if solve(bo):
                return True
            bo[row][col] = 0
    return False
Exemplo n.º 7
0
def view_solns():
    line = request.args.get('input', '', type=str)
    sort = request.args.get('sortby', 'scoreD', type=str)
    # validate
    if sort not in solver.SORT_ORDERS:
        sort = 'scoreD'
    if not solver.valid(line):
        return render_template('badinput.html')

    board, mults = solver.extract_board(line)
    data = { 'board': ''.join(board),
             'mults': mults,
             'lettervals': solver.LETTER_VALS,
             'line': line,
             'sortby': sort,
           }
    return render_template('viewer.html', **data)
Exemplo n.º 8
0
    def solve(self):
        find = find_empty(self.board)
        if not find:
            return True
        else:
            row, col = find

        for i in range(1, 10):
            if valid(self.board, i, (row, col)):
                self.board[row][col] = i

                if self.solve():
                    return True

                # backtrack to last element
                self.board[row][col] = 0
        return False
Exemplo n.º 9
0
    def solve(self):
        find = find_empty(self.model)
        if not find:
            return True
        else:
            row, col = find

        for i in range(1, 10):
            if valid(self.model, i, (row, col)):
                self.model[row][col] = i

                if self.solve():
                    return True

                self.model[row][col] = 0

        return False
Exemplo n.º 10
0
    def initialise(self):
        find = self.find_next()
        if not find:
            return True
        else:
            row, col = find

        for i in range(1, 10):
            if solver.valid(self.board, i, (row, col)):
                self.board[row][col] = i
                self.selected[row][col] = 0
                if solver.solve(copy.deepcopy(self.board)):
                    if self.initialise():
                        return True

                    self.board[row][col] = 0
                    self.selected[row][col] = 1
        return False
Exemplo n.º 11
0
    def place(self, val: int) -> bool:
        """Confirms the number entered is valid and places it permanently.

        Args:
            val (int): Number to be placed.

        Returns:
            bool: True if valid, otherwise False.
        """
        row, col = self.selected
        if self.cubes[row][col].value == 0:
            self.cubes[row][col].set(val)
            self.update_model()

            if valid(self.model, val, (row, col)) and solve(self.model):
                return True
            else:
                self.cubes[row][col].set(0)
                self.cubes[row][col].set_temp(0)
                self.update_model()
                return False
Exemplo n.º 12
0
def display_solution(win, board, play_time, strikes):
    board.update_model()
    find = find_empty(board.model)
    if not find:
        return True
    else:
        row, col = find

    for i in range(1, 10):
        if valid(board.model, i, (row, col)):
            board.cubes[row][col].set(i)
            board.update_model()
            redraw_window(win, board, play_time, strikes)
            pygame.display.update()

            if display_solution(win, board, play_time, strikes):
                return True

            board.cubes[row][col].set(0)
            board.update_model()
            redraw_window(win, board, play_time, strikes)
            pygame.display.update()

    return False
Exemplo n.º 13
0
 def test_verify(self):
     """Verify some validation and sample board properties."""
     board = PUZZLES[2]
     assert solver.valid(board) is True
     assert solver.complete(board) is False
     assert len(board) == 9