renat20648643540
26.01.2023 10:53

решить данную сложную задачу. Сам не справляюсь. идея следующая: должны быть функции для проверки заполнение таблицы судоку. нужна функция, которая для каждой ещё не заполненные ячейки проверяет. Какие значения туда можно подставить также нужно. Дописать функции менеджера, которая проверяет корректность заполнения судоку.
Следующее сначала функция проходи, по всем клеткам судоку не заполненным и в какую-нибудь из клеток, в которой наименьшее количество вариантов можно подставить запускает саму себя же, по-моему со всеми вариантами, А дальше идёт по рекурсии, соответственно, все варианты, которые не подходят, они отсекаются функции, ничего не вызывают. все варианты, которые подходят они запускают в следующую итерацию новые функции, которые уже пытается подставлять в другие ячейки
Желательно не переименовывать данные. Если есть какие-то вопросы задавайте.
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))

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
maksgolovakha228
23.02.2022 02:18
Const n=5;
var i: integer;
b: real;
a: array [1..n] of integer;  {если его элементы целые числа (про тип чисел ничего не сказано в задании)}
begin 
           for i:=1 to n do
           read(a[i]);
           if ((a[1]+a[3]) mod 5 = 0) and (a[5] mod 10 = 3) then
           begin b:=0;
                     for i:=1 to 5 do
                     b:=b+sqr(a[i]);
           end
           else begin b:=1;
                            for i:=1 to 5 do
                            b:=b*sqrt(a[i]);
                   end;
writeln(b:1:2);        {округление до сотых}
if (a[1]+a[2]+a[3])>15 then writeln('да, сумма 1, 2 и 3 чисел больше 15')
else writeln('нет, сумма 1, 2 и 3 чисел меньше или равна 15');
if ((a[4]+a[5]) div 10>0) and ((a[4]+a[5]) div 100<0) then writeln('да, сумма 4 и 5 чисел - двузначное число')
else writeln('нет, сумма 4 и 5 чисел - не двузначное число');
readln; {чтобы была задержка до нажатия кнопки при выполнении программы и мы могли бы увидеть ответ}
end.
Решить можно и без использования массива.
0,0(0 оценок)
Ответ:
puh9999
23.02.2022 02:18
1. CDIX = 500-100+10-1=409,
CVXLIX = 100-5-10+50-1+10=144
MCCXIX = 1000+200+10-1+10=1219

2. 93710/2=46855(0)/2=23427(1)/2=11713(1)/2=5856(1)/2=2928(0)/2=1464(0)/2=
=732(0)/2=366(0)/2=183(0)/2=91(1)/2=45(1)/2=22(1)/2=11(0)/2=5(1)/2=2(1)/2=
=1(0)/2=0(1)
93710(10) = 10110111000001110(2)
Для перевода в восьмеричную систему двоичное число разбивают на тройки
 |010|110|111|000|001|110 =267016(8)
Для перевода в 16-ю, двоичное число разбивают на четверки
 |0001|0110|1110|0000|1110 =16E0E(16)

3. Для перевода восьмеричного числа в двоичное необходимо каждую цифру заменить эквивалентной ей двоичной триадой
764(8)=111110100(2)
312(8)=11001010(2)

4. а) 110101(2) =2°+2²+2⁴+2⁵=1+4+16+32=53(10)
б) 10110001(2) = 2°+2⁴+2⁵+2⁷=1+16+32+128=177(10)
в) 563(8) = 3*8°+6*8+5*8²= 3+48+320 =371 (10)
г) 635(8) = 5*8°+3*8+6*8²= 413(10)
д) АС4(16) = 4+12*16+10*16²=2756(10)
е) 9D5С(16) = 12+5*16+13*16²+9*16³=40284(10)
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота