Мини-судоку Решите рекурсивно мини-судоку размером 4x4. Для этого напишите функцию solve_sudoku(matrix), где matrix - целочисленная матрица (список списков).
В мини-судоку числа от 1 до 4 встречаются ровно один раз в каждой вертикали и горизонтали, а также в квадратах 2x2.
Подумайте, как можно использовать функцию решения судоку для генерации корректно заполненных полей. Это бывает нужно, например, для обратной задачи – генерации судоку.
Формат ввода Со стандартного потока ввода для решения выдается Судоку, представленный в виде таблицы чисел, в которой нулями обозначены пустые места:
Бір Байт бір-бірімен қатарласа тізбек түрінде орналасқан 8 биттен, яғни екілік сан таңбаларынан тұрады. Мысалы, компьютерде “Е” әрпі 10000101, кіші “е” әрпі 10100101, “/” таңбасы 00101111, “8” саны 00111000 түрінде өңделеді. Бір Байт тек бір символды бейнелейтін ақпарат өлшеу бірлігі болғандықтан, оның көмегімен 256 символды (28=256) өрнектеуге болады. Компьютер жадының көлемі осы Байт бірлігімен өлшенеді. Ол үшін Байт бірлігінің еселік түрлері: килобайт — Кб (1 Кб=1024 Б=210Б.), мегабайт — Мб (210 Кб), гигабайт — Гб (210Мб) қолданылады. Мысалы, ЭЕМ-нің шапшаң жадының көлемі 32 Мб болса, онда 32Һ210 Байт (символ) ақпарат сақталынады. Ал, ЭЕМ-нің сыртқы жадында (магниттік дискілерінде) 1—8 Гб және одан да көп ақпарат сақтауға болады. Мысалы, 400 беті бар, әр бетінде 50 қатар, ал әр қатарда 50 таңба болатын кітаптың көлемін Байт арқылы есептесек, онда 400Һ50Һ50 = 1000000 Байт = 1 Мб (яғни көлемі 1 Гб дискі 1000 кітапты есте сақтай алады). Қатар орналасқан төрт Байт бір машиналық сөз болып есептеледі, ол 32 биттен тұрады. 64 биттен немесе 8 Байттан тұратын мәліметтер бірлігі екі еселенген машиналық сөз деп аталады. Компьютер осы машиналық сөздер тізбегін өңдейді
Бір Байт бір-бірімен қатарласа тізбек түрінде орналасқан 8 биттен, яғни екілік сан таңбаларынан тұрады. Мысалы, компьютерде “Е” әрпі 10000101, кіші “е” әрпі 10100101, “/” таңбасы 00101111, “8” саны 00111000 түрінде өңделеді. Бір Байт тек бір символды бейнелейтін ақпарат өлшеу бірлігі болғандықтан, оның көмегімен 256 символды (28=256) өрнектеуге болады. Компьютер жадының көлемі осы Байт бірлігімен өлшенеді. Ол үшін Байт бірлігінің еселік түрлері: килобайт — Кб (1 Кб=1024 Б=210Б.), мегабайт — Мб (210 Кб), гигабайт — Гб (210Мб) қолданылады. Мысалы, ЭЕМ-нің шапшаң жадының көлемі 32 Мб болса, онда 32Һ210 Байт (символ) ақпарат сақталынады. Ал, ЭЕМ-нің сыртқы жадында (магниттік дискілерінде) 1—8 Гб және одан да көп ақпарат сақтауға болады. Мысалы, 400 беті бар, әр бетінде 50 қатар, ал әр қатарда 50 таңба болатын кітаптың көлемін Байт арқылы есептесек, онда 400Һ50Һ50 = 1000000 Байт = 1 Мб (яғни көлемі 1 Гб дискі 1000 кітапты есте сақтай алады). Қатар орналасқан төрт Байт бір машиналық сөз болып есептеледі, ол 32 биттен тұрады. 64 биттен немесе 8 Байттан тұратын мәліметтер бірлігі екі еселенген машиналық сөз деп аталады. Компьютер осы машиналық сөздер тізбегін өңдейді
from turtle import * # импортирую *встроенную(она скачана при
# установке питона) библиотеку turtle
# * для упрощения пр. до: turtle.комманда после: команда #
# (избавляемся от turtle. - заменяем
# *turtle.комманда() на просто *команда())
reset() # очищаю экран (вдруг что-то случится)
t = Turtle()
t.hideturtle() # не показывать курсор черепахи
screensize(800, 800, color('black')) # расширение окна
# цвет
# numinput(заголовок, основной текст и т.д.) такая функция в turtle она просит пользователя ввести #число от minval до maxval - все задается
# иначе все выбирает (из цифр) (любое число пр. - 3054501210321)
color = numinput('Выберите цвет звезды: ',
'1 - красный, 2 - желтый, 3 - синий',
minval=1, # минимальное значение
maxval=3) # максимальное значение
# условные операторы (выполняют действие при условии...)
if color == 1:
color = t.color("red")
elif color == 2:
color = t.color("yellow")
elif color == 3:
color = t.color("blue")
# скорость и обновить экран
speed(0) # 0 - самая быстрая, также как и 10, без разницы
update()
# функция (выполняется когда пишут имя_функции(и
# аргументы(size и т.п.) бывает и без них тогда просто пустое
# поле))
def draw_star(size):
t.begin_fill() # заполнить когда t.end_fill()
# рисую
angle = 144 # начальный луч
# цикл (_ ставлю когда ничего не объявляю)
for _ in range(5): # 5 длинных сторон(оригинальный
t.forward(size) # нарисовать линии
t.right(angle) # и повернуть
t.end_fill()
# смещаем на 300 вправо по x
t.left(180)
t.forward(200)
t.right(180)
# рисуем
draw_star(100 * 3) # размер
# ну и обновлять экран пока True (всегда или до выхода
# пользователя из программы)
while True:
update()