 
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
         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
                     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
                     0
                    0
                 
            Вот пример более компактного и эффективного решения для проверки валидности поля Sudoku:
pythondef 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
                     0
                    0
                Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
- 
			Математика 
- 
			Литература 
- 
			Алгебра 
- 
			Русский язык 
- 
			Геометрия 
- 
			Английский язык 
- 
			Химия 
- 
			Физика 
- 
			Биология 
- 
			Другие предметы 
- 
			История 
- 
			Обществознание 
- 
			Окружающий мир 
- 
			География 
- 
			Українська мова 
- 
			Информатика 
- 
			Українська література 
- 
			Қазақ тiлi 
- 
			Экономика 
- 
			Музыка 
- 
			Право 
- 
			Беларуская мова 
- 
			Французский язык 
- 
			Немецкий язык 
- 
			МХК 
- 
			ОБЖ 
- 
			Психология 
- 
			Физкультура и спорт 
- 
			Астрономия 
- 
			Кыргыз тили 
- 
			Оʻzbek tili 
 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			 
			