Рубрики
Без рубрики

Sudoku Solver – некоторые дополнения

Код здесь August дополнения Итак, теперь, когда Sudoku Algo на месте, было бы неплохо … Tagged с начинающими, Python, Sudoku.

Код здесь

Август дополнения

Итак, теперь, когда Sudoku Algo на месте, было бы неплохо сделать его пригодным для использования. Я хочу добавить пару вещей:

  • Делая это красиво – дайте демонстрации головоломок немного любви
  • Система для ввода Sudokus Вы найдете онлайн/в RL.
  • Способность хранить головоломки (и решения)
  • Возможность иметь небольшой демонстрационный режим
  • Покажите, сколько времени потребовалось, чтобы найти решение.
  • и система меню, чтобы связать все это вместе.

Делаем это красивым

Первое, что я коснулся – просто небольшая функция sudoku.display_board (), чтобы распечатать информацию визуально приятным способом на основе примера, который я нашел в поиске Google Image.

def display_board(puzzle):
        print('\n')
        print('+-------+-------+-------+')
        for y in range(0, len(puzzle)):
            print(f'| {puzzle[y][0]} {puzzle[y][1]} {puzzle[y][2]} ' +
                    f'| {puzzle[y][3]} {puzzle[y][4]} {puzzle[y][5]} ' +
                    f'| {puzzle[y][6]} {puzzle[y][7]} {puzzle[y][8]} |')
            if y in [2, 5, 8]:
                print('+-------+-------+-------+')

То, как разработан фанк, позволяет печатать частичные доски – это было немного случайно, но помогает с обратной связью с информацией при вводе платы – см. Ниже.

Вход головоломки

Поэтому в идеальном мире я бы просто хотел иметь возможность сфотографировать судоку или скриншот, и это было решено. Но пока это немного вне меня.

Вместо этого я использовал входную функцию, которая просит вас ввести в строку головоломки по строке, а 0 представляло пропущенные значения. Возможно, это не самое изящное решение, но оно позволяет мне довольно легко подавать при входе в функцию решения.

def input_puzzle():
        puzzle = []
        input_msg = 'Input the known values.\nIf value is blank, input 0.\nEg. 530070000\n'
        while len(puzzle) < 9:
            valid = False
            while not valid:
                new_row = input(input_msg)
                puzzle.append(Sudoku.convert_row(new_row))
                valid = Sudoku.validate_row(new_row, puzzle)
                if not valid:
                    puzzle.pop()
                    print('Try Again\n\n')
        return puzzle

Convert_row превращает ввод в список.

Единственное, о чем я сожалею, – это проверять каждую строку после его печати. Это очень раздражает, потому что большую часть времени я правильно понял ряд, и неоднократно подтверждая, стало утомительным. Опять же, когда ошибочно совершается, это означает, что не только необходимость снова запустить головоломку, но и необходимость завершить ввод любых дальнейших строк. Что было бы действительно дерьмо. Таким образом, это суждение между небольшим количеством постоянного раздражения или редкими катастрофами. Хм.

Вы даже не можете нажать Enter несколько раз … это просто зарегистрирует строку как неполную. Возможно, это должно признать, что если вы просто постукиваете Enter, вы отказались от процесса.

[Отдых позже …]

Оригинал: “https://dev.to/bmraubo/sudoku-solver-some-additions-436a”