Вопрос задан 09.06.2023 в 01:03. Предмет Информатика. Спрашивает Невская Полина.

Python. Валидность поля SUDOKU Все знают SUDOKU.На входе дают 9 строк.

Например195743862431865927876192543387459216612387495549216738763524189928671354254938671Это построчные наборы цифр.Необходимо проверить чтобы каждая строка содержала от 1 до 9Каждый столбец содержал от 1 до 9И каждый маленький квадратик 3*3 (9 шт) содержал от 1 до 9Чтобы было все и не повторялось.Считать циферки можно так:A=[list(input()) for i in range(9)]И это уже даже будет списком двухмерным.Затем можно проверить строки быстроfor i in range(9): if len(set(A[i]))!=9: print('все плохо :)') #здесь проверка когда еще был одномерный список, но идея должна быть понятна.но надо еще столбцы проверить, что в принципе легко и самое интересное квадратики. Кто подскажет нерутинные интересные решения?Еще для теста295743861431865927876192543387459216612387495549216738763524189928671354154938672На выходе Yes/No (валидное игровое поле или где-то накосячено).Можно и рутинные, но чтоб не очень сильно :). Предлагайте.Не знающим - проходите мимо.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Волк Света.

Для проверки столбцов вы можете использовать простой цикл с вложенным циклом. Внешний цикл будет проходить по всем столбцам, а внутренний цикл будет проходить по всем строкам, и проверять каждый элемент столбца с помощью set.

for j in range(9):

   column = [A[i][j] for i in range(9)]

   if len(set(column)) != 9:

       print("Invalid column")

Для проверки квадратов 3x3 вы можете использовать три цикла, один для каждой строки квадрата, один для каждого столбца квадрата, и один для каждого квадрата.

for i in range(0, 9, 3):

   for j in range(0, 9, 3):

       square = [A[x][y] for x in range(i, i+3) for y in range(j, j+3)]

       if len(set(square)) != 9:

           print("Invalid square")

И если в ходе этих операций не было выведено Invalid column и Invalid square то это валидное поле.

0 0
Отвечает Черешнюк Саша.

import random

def print_sudoku(sudoku): # вывод судоку на экран

   for i in range(9): # 9 строк судоку

       for j in range(9): # 9 столбцов судоку

           print(sudoku[i][j], end=' ') # вывод значения судоку

       print() # переход на новую строку

def check_sudoku(sudoku, row, col, num): # проверка судоку на правильность

   for i in range(9): # 9 строк судоку

       if sudoku[i][col] == num: # проверка строки

           return False

   for j in range(9): # 9 столбцов судоку

       if sudoku[row][j] == num: # проверка столбца

           return False

   for i in range(3): # 3 строки в квадрате 3x3

       for j in range(3): # 3 столбца в квадрате 3x3

           if sudoku[(row // 3) * 3 + i][(col // 3) * 3 + j] == num: # проверка квадрата 3x3

               return False

   return True

def generate_sudoku(sudoku, row, col): # генерация судоку

   if row == 9: # если все строки судоку заполнены

       return True

   if col == 9: # если все столбцы судоку заполнены

       return generate_sudoku(sudoku, row + 1, 0)

   if sudoku[row][col] != 0: # если ячейка судоку не пустая

       return generate_sudoku(sudoku, row, col + 1)

   for num in range(1, 10): # перебор чисел от 1 до 9

       if check_sudoku(sudoku, row, col, num): # проверка судоку на правильность

           sudoku[row][col] = num # заполнение ячейки судоку

           if generate_sudoku(sudoku, row, col + 1): # генерация судоку

               return True

           sudoku[row][col] = 0 # очистка ячейки судоку

   return False

def main(): # главная функция программы

   sudoku = [[0 for j in range(9)] for i in range(9)] # создание судоку

   generate_sudoku(sudoku, 0, 0) # генерация судоку

   print_sudoku(sudoku) # вывод судоку на экран

if __name__ == '__main__': # проверка на запуск файла

   main() # запуск главной функции программы


0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Вот пример более компактного и эффективного решения для проверки валидности поля Sudoku:

python
def validate_sudoku(board): # Проверка строк и столбцов for i in range(9): if len(set(board[i])) != 9 or len(set(row[i] for row in board)) != 9: return False # Проверка квадратов 3x3 for i in range(0, 9, 3): for j in range(0, 9, 3): square = [board[x][y] for x in range(i, i+3) for y in range(j, j+3)] if len(set(square)) != 9: return False return True # Считываем цифры board = [list(input()) for _ in range(9)] # Проверяем валидность поля Sudoku if validate_sudoku(board): print("Yes") else: print("No")

В этом решении мы используем двойные циклы для проверки строк, столбцов и квадратов 3x3. Мы используем множества (set) для проверки уникальности чисел в каждой строке, столбце и квадрате. Если встречается дубликат, то возвращаем False, иначе возвращаем True.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос