решить данную сложную задачу. Сам не справляюсь. идея следующая: должны быть функции для проверки заполнение таблицы судоку. нужна функция, которая для каждой ещё не заполненные ячейки проверяет. Какие значения туда можно подставить также нужно. Дописать функции менеджера, которая проверяет корректность заполнения судоку.
Следующее сначала функция проходи, по всем клеткам судоку не заполненным и в какую-нибудь из клеток, в которой наименьшее количество вариантов можно подставить запускает саму себя же, по-моему со всеми вариантами, А дальше идёт по рекурсии, соответственно, все варианты, которые не подходят, они отсекаются функции, ничего не вызывают. все варианты, которые подходят они запускают в следующую итерацию новые функции, которые уже пытается подставлять в другие ячейки
Желательно не переименовывать данные. Если есть какие-то вопросы задавайте.
def print_sudoku(sudoku_data):
print(' ')
print(f'| {sudoku_data[0][0]} {sudoku_data[0][1]} | {sudoku_data[0][2]} {sudoku_data[0][3]} |')
print(f'| {sudoku_data[1][0]} {sudoku_data[1][1]} | {sudoku_data[1][2]} {sudoku_data[1][3]} |')
print(' ')
print(f'| {sudoku_data[2][0]} {sudoku_data[2][1]} | {sudoku_data[2][2]} {sudoku_data[2][3]} |')
print(f'| {sudoku_data[3][0]} {sudoku_data[3][1]} | {sudoku_data[3][2]} {sudoku_data[3][3]} |')
print(' ')
def check_unique_cells(cells_filled, cells):
is_not_filled = True
if cells_filled == 4:
is_not_filled = False
if cells_filled == len(set(cells)) - 1 * is_not_filled:
return True
return False
def check_rows(sudoku_data):
for row in sudoku_data:
cells_filled = 0
for cell in row:
if cell != 'X':
cells_filled += 1
if not check_unique_cells(cells_filled, row):
return False
return True
def check_columns(sudoku_data):
for i in range(len(sudoku_data)):
cells_filled = 0
column = []
for j in range(len(sudoku_data)):
if sudoku_data[j][i] != 'X':
cells_filled += 1
column.append(sudoku_data[j][i])
if not check_unique_cells(cells_filled, column):
return False
return True
def check_squares(sudoku_data):
indexes = [[0, 0], [2, 0], [0, 2], [2, 2]]
deltas = [[0, 0], [1, 0], [0, 1], [1, 1]]
for index in indexes:
cells_filled = 0
square = []
for delta in deltas:
if sudoku_data[index[0] + delta[0]][index[1] + delta[1]] != 'X':
cells_filled += 1
square.append(sudoku_data[index[0] + delta[0]][index[1] + delta[1]])
if not check_unique_cells(cells_filled, square):
return False
return True
def check_sudoku(sudoku_data):
if check_rows(sudoku_data) and check_columns(sudoku_data) and check_squares(sudoku_data):
return True
return False
if __name__ == '__main__':
sudoku_data = [['2', '3', '4', 'X'], ['X', 'X', 'X', '1'], ['X', 'X', 'X', 'X'], ['X', 'X', 'X', 'X']]
print_sudoku(sudoku_data)
print(check_sudoku(sudoku_data))
285
491
Ответы на вопрос:
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
cazydays19.01.2022 18:29
-
Nastykissa06.10.2022 08:12
-
Grebeshe15.02.2020 05:01
-
Stikki10.10.2022 18:54
-
Начинайко13.04.2023 08:36
-
YUSUFOV31.12.2022 06:57
-
Gobbygo07.01.2020 07:26
-
kimvlad171208.04.2022 00:26
-
мротмсс24.10.2022 16:05
-
mi26230.04.2022 01:24
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.