1 / 0 / 1
Регистрация: 25.01.2021
Сообщений: 21

Доработка программы, найти ошибку, либо дописать какое-то дополнительное условие проверки

03.03.2021, 11:39. Показов 614. Ответов 2

Студворк — интернет-сервис помощи студентам
По условию задачи необходимо написать функцию проверки правильности заполнения доски судоку. Я ее написал и вроде даже все работает, но 1 тест не проходит. Из этого следует что программа либо имеет ошибку, либо в ней не предусмотрено какое-то дополнительное условие.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def done_or_not(board):
    lis = []
    if len(board) == 0:
        return 'Try again!'
    if [9 for i in range(len(board))].count(9) != 9:
        return 'Try again!'
    for i in range(0, 9):
        for j in range(0, 9):
            lis = [board[i][j] for i in range(0, 9) if j != i]
            for k in range(len(board[i])):
                if board[i].count(board[i][k]) > 1 and (board[i][k] not in lis or board[i][k] in lis):
                    return 'Try again!'
        
            lis1 = []
            if i in [0, 3, 6] and j in [0, 3, 6]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j, j + 3)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'
            elif i in [1, 4, 7] and j in [1, 4, 7]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j - 1, j + 2)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'
            elif i in [2, 5, 8] and j in [2, 5, 8]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j - 2, j + 1)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'
        
    return 'Finished!'
Входные данные имеют примерно следующий вид:
Python
1
2
3
4
5
6
7
8
9
print(done_or_not([[1, 3, 2, 5, 7, 9, 4, 6, 8]
                        ,[4, 9, 8, 2, 6, 1, 3, 7, 5]
                        ,[7, 5, 6, 3, 8, 4, 2, 1, 9]
                        ,[6, 4, 3, 1, 5, 8, 7, 9, 2]
                        ,[5, 2, 1, 7, 9, 3, 8, 4, 6]
                        ,[9, 8, 7, 4, 2, 6, 5, 3, 1]
                        ,[2, 1, 4, 9, 3, 5, 6, 8, 7]
                        ,[3, 6, 5, 8, 1, 7, 9, 2, 4]
                        ,[8, 7, 9, 6, 4, 2, 1, 5, 3]]))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.03.2021, 11:39
Ответы с готовыми решениями:

Как сделать какое-либо действие сразу после запуска программы, без нажатия чего-либо
Как сделать какое-либо действие сразу после запуска программы, без нажатия чего-либо?

Объединить две задачи в одну, либо дописать второе условие в задачу
.блок-схему Добрый день , некак не могу сдать задачу , у него 2 условия , есть решеные условия, но отдельно друг от друга , и нужно бы их...

Какое условие необходимо для проверки равных элементов столбца двухмерного массива?
Дана целочисленная матрица nxn найти номера столбцов элементы которых равны. построить матрицу не беда, но как я написал в заголовке...

2
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
03.03.2021, 12:22
Если забудем про количество сортировок и проходов по списку, то можно так
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def done_or_not(board):
    lst1to9 = list(range(1, 10))
    if not (all(sorted(row) == lst1to9 for row in board)
            and all(sorted(row) == lst1to9 for row in zip(*board))):
        return False
 
    for i in range(0, 9, 3):
        for j in range(0, 9, 3):
            lst = []
            for k in range(i, i+3):
                for m in range(j, j+3):
                    lst.append(board[k][m])
            if not sorted(lst) == lst1to9:
                return False
 
    return True
Добавлено через 7 минут
Список lst можно срезами заполнить
0
1 / 0 / 1
Регистрация: 25.01.2021
Сообщений: 21
03.03.2021, 12:29  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
def done_or_not(board):
    lis = []
    if len(board) == 0:
        return 'Try again!'
    if [9 for i in range(len(board))].count(9) != 9:
        return 'Try again!'
    for i in range(0, 9):
        for j in range(0, 9):
            lis = [board[i][j] for i in range(0, 9)]
            if lis.count(board[i][j]) > 1:
                return 'Try again!'
            elif board[i].count(board[i][j]) > 1:
                return 'Try again!'
 
            
            lis1 = []
            if i in [0, 3, 6] and j in [0, 3, 6]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j, j + 3)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'
            elif i in [1, 4, 7] and j in [1, 4, 7]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j - 1, j + 2)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'
            elif i in [2, 5, 8] and j in [2, 5, 8]:
                for k in range(3):
                    lis1.extend([board[k][i] for i in range(j - 2, j + 1)])
                if lis1.count(board[i][j]) > 1:
                    return 'Try again!'           
            
    return 'Finished!'
В общем в проверке по строкам и столбцам была ошибка немного переписал и все заработало
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.03.2021, 12:29
Помогаю со студенческими работами здесь

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

Подправить код. Подключать клиентов до тех пор, пока не выполнится какое-либо условие
Доброго времени суток.Есть клиент-сервер, который принимает только четырех клиентов. Как изменить код так, чтобы сервер принимал клиентов,...

Условие отбора по по полю со списком формы -оно может быть пустое или содержать какое-либо значение
Форумчане, доброго времени суток! Подскажите, пожалуйста, как изменить условие отбора в запросе: Like...

Условие для проверки на ошибку при вводе
Есть функция выбора: int start_menu() { system("cls"); while(1)//Создание первоначального пользовательского меню { ...

Никак не могу найти ошибку, должен сосздать матрицу либо из звездочеку либо из пробелов
#include <iostream> #include <cmath> #include <ctime> using namespace std; int main(){ char a; int zvezd,probel,b; int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru