Магическим квадратом порядка 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)
