Example #1
0
def testvals():
    indices_seq = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]

    values = indices_seq
    rows = indices_seq
    columns = indices_seq
    result = ""
    liste = ""

    if request.method == 'POST':
        result = request.form
    for i in rows:
        for j in columns:
            cell = "cell_" + i + j
            liste += result[cell] + " " + "\n"
    erg = solve_sudoku(result)
    print(erg)

    fieldString = ""

    for i in range(9):
        fieldString += "<tr>\n"
        for j in range(9):
            fieldString += "<td><input type=\"number\" value=\"" + erg[i][
                j] + " \" name=\"cell_" + str(i) + str(
                    j) + "\">" + erg[i][j] + "</td>\n"
        fieldString += "\n</tr>"
        print(fieldString)
    return render_template('sudoku.html', fields=fieldString)
Example #2
0
def sudoku():
    board = request.json.get("board")
    converted_board = convert_board(board)
    solved_board = solve_sudoku(converted_board)
    return jsonify({
        "board": solved_board
    })
Example #3
0
    def get_sudoku(self):
        sudoku = []
        linha = []

        num = 0
        while num < 81:

            self.data[num].config({"background": "White"})
            linha.append(self.data[num].get())
            if self.data[num].get() == '':
                self.soluction_cel.append(num)
            num += 1

            if not num % 9 and num:
                sudoku.append(linha)
                linha = []

        result, solucao = solve_sudoku(sudoku)

        if result == 0:
            self.warning['text'] = "Solution:"

            idx = 0
            for lin in solucao:
                for col in lin:
                    if self.data[idx].get() == '':
                        self.data[idx].insert(0, str(col))
                    else:
                        self.data[idx].config(fg='green')
                    idx += 1
        if result == 1:
            self.warning['text'] = "Mutiple solutions, exemple:"
            idx = 0
            for lin in solucao:
                for col in lin:
                    if self.data[idx].get() == '':
                        self.data[idx].insert(0, str(col))
                    else:
                        self.data[idx].config(fg='green')
                    idx += 1
        elif result == 2:
            self.warning['text'] = "Sudoku not resovable"

        elif result == 3:
            self.warning['text'] = "Too litle data in the Sudoku"

        elif result == 4:
            self.warning['text'] = 'Conflicts in the Sudoku'
            for cel in solucao:
                loc = (cel[0] * 9) + cel[1]
                self.data[loc].config({"background": "Red"})
Example #4
0
 def post(self):
     sudoku_input = ''
     for i in range(0, 9):
         line = ''
         for j in range(0, 9):
             val = self.get_argument(str(i) + str(j), '')
             if val == '':
                 val = '0'
             line += val + ' '
         sudoku_input += line[:-1] + '\n'
     #board = sudoku.solve_sudoku(sudoku_input)
     board = sudoku.solve_sudoku("")
     message = ' '.join(str(item) for innerlist in board for item in innerlist)
     self.write(message)
Example #5
0
 def solve_puzzle(self):
     screenshot = self.screenshot(wait=2)
     img_fields = recognize_puzzle(screenshot)
     print('Puzzle:\n', [i.number for i in img_fields])
     solved_puzzle = solve_sudoku([i.number for i in img_fields])
     print('Solution:\n', solved_puzzle)
     last_x, last_y = 0, 0
     for i in img_fields:
         if i.number:
             continue
         print(i)
         self.click_by_position(i.x_center - last_x, i.y_center - last_y,
                                solved_puzzle[i.index])
         last_x = i.x_center
         last_y = i.y_center
Example #6
0
    def test_solve_sudoku(self):
        matrix = [[1,0,0,0],
                  [0,0,0,4],
                  [0,0,2,0],
                  [0,3,0,0]]

        target = [[1,4,3,2],
                  [3,2,1,4],
                  [4,1,2,3],
                  [2,3,4,1]]

        bqm = build_bqm(matrix)
        result = solve_sudoku(bqm, matrix)

        self.assertEqual(result, target)
Example #7
0
def get_sudoku(sudoku_image):
    """this method gets the answer for the sudoku"""
    method_return = detect_sudoku(sudoku_image)
    """digits : grids of numbers present in the image, matrix is predicted numbers"""
    matrix, digits, cropped = method_return  # cropped sudoku with changed and warped perspective
    # show_image(digits)
    print("matrix")
    matrix = matrix.tolist()
    answer = []
    count = 0
    """sudoku.py called here to solve the sudoku"""
    for solution in sudoku.solve_sudoku((3, 3), matrix):
        if count > 10:
            break
        count = count + 1
        answer.append([*solution])

    answer = np.array(answer)
    answer = answer.reshape(9, 9)
    return answer.flatten(), digits, cropped
Example #8
0
	def test_get_random_sudoku(self):
		sud=get_random_sudoku()
		self.check(sud)
		print("Random:")
		self.print_sud(sud)
		print()

		remove=20
		sud=get_random_sudoku(remove)
		count=0
		for row in range(9):
			for col in range(9):
				count+=1 if sud[row][col] is None else 0
		self.assertEqual(remove,count)
		print("Random remove")
		self.print_sud(sud)
		print()

		solved=solve_sudoku(sud)
		self.check(solved)
		print("Random remove solved")
		self.print_sud(sud)
		print()
Example #9
0
    def test_get_random_sudoku(self):
        sud = get_random_sudoku()
        self.check(sud)
        print("Random:")
        self.print_sud(sud)
        print()

        remove = 20
        sud = get_random_sudoku(remove)
        count = 0
        for row in range(9):
            for col in range(9):
                count += 1 if sud[row][col] is None else 0
        self.assertEqual(remove, count)
        print("Random remove")
        self.print_sud(sud)
        print()

        solved = solve_sudoku(sud)
        self.check(solved)
        print("Random remove solved")
        self.print_sud(sud)
        print()
            else:
                row.append(0)
            bar.next()
        grid.append(row)
    return grid

# Input the solved sudoku into the game
def automate_game(org_grid, solved_grid):
    for i in range(9):
        for j in range(9):
            if org_grid[i][j] == 0:     # If the box was blank in the game
                x1, y1, x2, y2 = get_coords(i, j)
                center = (x1 + (x2 - x1)/2, y1 + (y2-y1)/2)     # Calculating the center of the box (to select it)
                solution = solved_grid[i][j]
                device.shell(
                    f'input touchscreen swipe {center[0]} {center[1]} {center[0]} {center[1]} 5')
                device.shell(f'input text {solution}')


if __name__ == "__main__":
    # Connect the device using ADB
    device = adb.connect_device()
    # Take Screenshot of the screen and save it in screen.png
    adb.take_screenshot(device)
    image = Image.open('screen.png')
    image = process_image(image)        # Process the image for OCR
    org_grid = get_grid_from_image(image)      # Convert the Image to 2D list using OCR / Pytesseract
    solved_grid = deepcopy(org_grid)        # Deepcopy is used to prevent the function from modifying the original sudoku game
    solve_sudoku(solved_grid)
    automate_game(org_grid, solved_grid)        # Input the solved game into your device
Example #11
0
import sudoku

TestMatrix = ((0, 8, 0, 0, 5, 0, 2, 0, 0),
              (0, 0, 0, 7, 0, 0, 0, 9, 0),
              (0, 3, 0, 0, 0, 2, 0, 0, 0),
              (0, 7, 2, 3, 0, 6, 1, 0, 0),
              (0, 0, 0, 0, 0, 5, 0, 2, 0),
              (5, 0, 3, 0, 1, 0, 8, 0, 0),
              (0, 0, 0, 0, 0, 0, 0, 1, 0),
              (9, 0, 0, 0, 4, 8, 0, 0, 7),
              (0, 0, 0, 9, 2, 0, 4, 0, 0))

print('Manually enter testset, PRESS 1')
print('Use sample testset, PRESS 2\n')
choice = input('Enter choice: ')
print()
if choice is '1':
    testset = sudoku.input_testset()
elif choice is '2':
    testset = TestMatrix
sudoku.solve_sudoku(testset, 'row')
 def test_find_solution(self):
     for k in TEST_KEYS:
         self.assertEqual(sudoku.solve_sudoku(sudoku_problems[k]),
                          sudoku_solutions[k])
Example #13
0
def test_sudoku(constraints):
    try:
        status, solution = solve_sudoku(constraints)
        return "PASS" if status == 'Optimal' else "FAIL"
    except:
        return "FAIL"
Example #14
0
def solve_sudoku(dict_values_readed):
    dict_values_solved = dict(dict_values_readed)

    return sudoku.solve_sudoku(dict_values_solved)
Example #15
0
def test_solve_sudoku(simple_sudoku, simple_sudoku_solved):
    assert sudoku.solve_sudoku(simple_sudoku)
    assert simple_sudoku == simple_sudoku_solved
Example #16
0
 def test_find_solution(self):
     print '\n'
     for k in TEST_KEYS:
         print 'Solving', k
         self.assertEqual(sudoku.solve_sudoku(sudoku_problems[k]),
                          sudoku_solutions[k])
Example #17
0
                    num_img = cv2.dilate(erode,kernel,iterations =1)
                    image = num_img.reshape((1,784)).astype(np.float32)
                    num = clf.predict(image)
                    grid[i][j] = num[0]

    sudstr = ''.join(str(i) for i in grid.flatten())
    return sudstr

def save_sol(sud_sol,sudstr,warp,solfile):
    for i in range(81):
        if sudstr[i] == '0':
            x = (i%9)*50 + 17
            y = int(i/9)*50 + 40
            cv2.putText(warp, sud_sol[i], (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (181, 2, 1), 2)
    cv2.imwrite(solfile,warp)

if __name__ == '__main__':
    trainfile = r'data/train.data'
    labelfile = r'data/label.data'
    testfile = r'data/test/test3.jpg'
    solfile = r'output/t3_ans.jpg'
    clf = get_clf(trainfile,labelfile)
    warp = get_roi(testfile)
    if warp is not None:
        sudstr = process_and_get_sud(clf,warp)
        sud_sol = sudoku.solve_sudoku(sudstr)
        save_sol(sud_sol,sudstr,warp,solfile)
    else:
        print('Failed to find Puzzle!')

Example #18
0
 def test_find_solution(self):
     print '\n'
     for k in TEST_KEYS:
         print 'Solving', k
         self.assertEqual(sudoku.solve_sudoku(sudoku_problems[k]),
                          sudoku_solutions[k])
Example #19
0
def test_find_solution():
    for k in TEST_KEYS:
        print('Solving', k)
        assert sudoku.solve_sudoku(sudoku_problems[k]) == sudoku_solutions[k]
def test_find_solution():
    for k in TEST_KEYS:
        print("Solving", k)
        assert sudoku.solve_sudoku(sudoku_problems[k]) == sudoku_solutions[k]