Уведомления

Группа в Telegram: @pythonsu

#1 Март 20, 2016 21:55:23

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Судоку

# Define a procedure, check_sudoku,
# that takes as input a square list
# of lists representing an n x n
# sudoku puzzle solution and returns the boolean
# True if the input is a valid
# sudoku square and returns the boolean False
# otherwise.
# A valid sudoku square satisfies these
# two properties:
#   1. Each column of the square contains
#       each of the whole numbers from 1 to n exactly once.
#   2. Each row of the square contains each
#       of the whole numbers from 1 to n exactly once.
# You may assume the the input is square and contains at
# least one row and column.
correct = [[1,2,3],
           [2,3,1],
           [3,1,2]]
incorrect = [[1,2,3,4],
             [2,3,1,3],
             [3,1,2,3],
             [4,4,4,4]]
               
def check_sudoku(p):
    n = len(p)
    digit = 1
    while digit <= n:
        i = 0
        while i < n:
            row_count = 0
            col_count = 0
            j = 0
            while j < n:
                if p[i][j] == digit:
                    row_count = row_count + 1
                if p[j][i] == digit:
                    col_count = col_count + 1
                j = j + 1
            if row_count != 1 or col_count != 1:
                return False
            i = i + 1
        digit = digit + 1
    return True
    
#print check_sudoku(incorrect)
#>>> False
print check_sudoku(correct)
#>>> True

Здравствуйте.
Есть задача по Судоку, суть которой в создании функции, которая в качестве переменных берет несколько списков и проверяет их на то, чтобы в каждой строке и каждом столбце квадрата, каждая цифра от 1 до n встречалось только один раз. Есть решение этой задачи.
Как вы понимаете это решение?

Отредактировано Kurtz (Март 20, 2016 21:57:05)

Офлайн

#2 Март 21, 2016 04:43:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Судоку

Берем список, кастуем его к множеству, сравниваем длину множества с длиной списка.



Офлайн

#3 Март 21, 2016 11:59:47

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Судоку

Что означает

p[i][j]
и
p[j][i]
?

Отредактировано Kurtz (Март 21, 2016 12:00:35)

Офлайн

#4 Март 22, 2016 16:39:06

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Судоку

Как форматированный набор из 33 строк кода, который в итоге выдает 4 строки:

>>> 
False
True
>>>

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version