В
Все
М
Математика
А
Английский язык
Х
Химия
Э
Экономика
П
Право
И
Информатика
У
Українська мова
Қ
Қазақ тiлi
О
ОБЖ
Н
Немецкий язык
Б
Беларуская мова
У
Українська література
М
Музыка
П
Психология
А
Алгебра
Л
Литература
Б
Биология
М
МХК
О
Окружающий мир
О
Обществознание
И
История
Г
Геометрия
Ф
Французский язык
Ф
Физика
Д
Другие предметы
Р
Русский язык
Г
География

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

Показать ответ
Ответ:
Rehjxrf13
Rehjxrf13
02.12.2022 14:29
//Вот программа, которая кодирует слова в системах счисления от 2 до 10
//Первый ввод - число, второй - система счисления
//Pascal ABC.NET v3.0

var
 a,i,b,r,n,j,bug:integer;
 s,se,slo,slof:string;

procedure preob(var a,b,n:integer; var se:string);
 begin
  repeat
   b:=a mod n;
   a:=a div n;
   str(b,se);
   s+=se;
  until (a<=n-1);
 end;

begin
readln(slo);
readln(n);
for j:=1 to length(slo) do
begin;
a:=ord(slo[j]);
preob(a,b,n,se);
str(a,se);
s+=se;
for i:=1 to length(s) div 2 do
begin;
se:=s[i];
s[i]:=s[length(s)-i+1];
s[length(s)-i+1]:=se[1];
end;
write(s,'-');
slof:=slof+s;
delete(s,1,length(s));
end;
end.

//Слово Программа она кодирует как 11001111-11110000-11101110-11100011-11110000-11100000-11101100-11101100-11100000-
0,0(0 оценок)
Ответ:
Almast1
Almast1
19.03.2023 07:09

print('x=?')

x = int(input())

print('n=?')

n = int(input())

g = 2

y = 0

c=0

if (n % 2) == 1:

   print('Так нельзя по условию')

   exit(0)

else:

   while c<(n/2):

       y = y + (1 - x) / g

       g=g+2

       c=c+1

print('у=', y)

Объяснение:

Получилось решить через цикл While

Можно и через For, но у меня там что-то пошло не так ,  однако это решение уменьшит количество переменных (должно, по крайней мере).  Если оно вам надо - напишите , в комментарии, я отошлю как разберусь.

Если нужно разобрать что как работает и что есть что - пишите в комментарии, я попробую .

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота