Матрицы. Магический квадрат

Магическим квадратом порядка n называется квадратная таблица размера n×n, составленная из всех чисел 1,2,3,…,n2 так, что суммы по каждому столбцу, каждой строке и каждой из двух диагоналей равны между собой. Напишите программу, которая проверяет, является ли заданная квадратная матрица магическим квадратом.

Формат входных данных
На вход программе подаётся натуральное число n — количество строк и столбцов в матрице, затем элементы матрицы: n строк, по n чисел в каждой, разделённые пробелами.

Формат выходных данных
Программа должна вывести слово YES, если матрица является магическим квадратом, и слово NO в противном случае.

start, ls, result, n = 0, [], 'YES', int(input())
s = (n**2 * (n**2 + 1))/(2 * n)  # сумма столбца в магическом кв
for _ in range(n):
    ls += [int(value) for value in input().split()]
if sum(ls[:n**2:n + 1]) != s or sum(ls[n - 1:n**2 - 1:n - 1]) != s:   #диагонали
    result = 'NO'
if len(ls) != len(set(ls)):   #наличие повторяющихся
    result = 'NO'
if min(ls) != 1 or max(ls) != n**2:  # мин и макс
    result = 'NO'    
for i in range(n):
    if sum(ls[i::n]) != s or sum(ls[start:start + n]) != s:  # столбцы/строки
        result = 'NO'
        break
    start += n
print(result)
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: