I already wrote one part of the program which is below:
def matrix_is_square(matrix):
for i in range(len(matrix)):
if len(matrix[i]) != len(matrix):
Complex solution using sum
, range
, any
functions and set
object:
def magic(m):
length = len(m)
first_sum = set()
if length <= 2 \
or any(len(row) != length for row in m) \
or any(i > (length * length) for row in m for i in row):
return False
for r in m:
s = sum(r)
if len(first_sum) == 0:
first_sum.add(sum(r))
if s not in first_sum:
return False
for i in range(length):
s = sum([r[i] for r in m])
if s not in first_sum:
return False
if sum(m[i][i] for i in range(length)) not in first_sum \
or sum(m[i][i] for i in range(length - 1, -1, -1)) not in first_sum:
return False
return True
m = [[2,7,6],[9,5,1],[4,3,8]]
print(magic(m))
m = [[16,3,2,13], [5,10,11,8],[9,6,7,12], [4,15,14,1]]
print(magic(m))
m = [[1,2,3,4], [5,6,7,8],[9,10,11,12], [13,14,15,16]]
print(magic(m))
m = [[1,1],[1,1]]
print(magic(m))
m = [[1,1],[1,1],[1,2]]
print(magic(m))
The output(sequentially):
True
True
False
False
False