Magic Square Identification in Python
In this tutorial, we are going to learn how to identify whether a given matrix is a magic square or not in Python. First, let’s take a look at what we mean by a magic square in terms of matrices.
What is a Magic Square?
A Magic Square is a square matrix in which the sum of all its rows, all its columns, and all its diagonals is equal to a single number and this number is called the Magic Constant or Magic Number.
Let’s take a look at an example:
0,2,4,6
6,6,0,0
1,1,5,5
5,3,3,1
This is a magic square with magic constant = 12
How to identify whether a given matrix is a Magic Square or not in Python?
For identifying a magic square, we need to keep in our minds that the sum of every row, every column, and every diagonal must be equal to each other. This is a simple enough task. So, here’s how we proceed:
- Take the sum of the first row as the magic constant.
- Check all other sums of rows, columns, and diagonals.
- If any row/column/diagonal found whose sum is not equal to the magic constant → return False
- Else return True
In order to make our task simpler and our code more interpretable, we will decompose our task into the following tasks:
- rows- all the rows of the square matrix do not add up to the magic number returns False
- columns- all the rows of the square matrix do not add up to the magic number returns False
- diagonals- all the rows of the square matrix do not add up to the magic number returns False
Implementing the code in Python
Below is our code:
def rows(square, magic_num):
n = len(square)
for i in range(n):
sum_row = 0
for j in range(n):
sum_row += square[i][j]
if sum_row != magic_num:
return False
return True
def columns(square, magic_num):
n = len(square)
for i in range(n):
sum_col = 0
for j in range(n):
sum_col += square[j][i]
if sum_col != magic_num:
return False
return True
def diagonals(square, magic_num):
n = len(square)
#left_to_right
sum_diag = 0
for i in range(n):
sum_diag += square[i][i]
if sum_diag != magic_num:
return False
#right to left
sum_diag = 0
for i in range(n):
sum_diag += square[i][-(i+1)]
return sum_diag == magic_num
# this is our main function
def magic_square(square):
# find magic number
magic_constant = 0
for n in square[0]:
magic_constant += n
return ( rows(square, magic_constant) and columns(square, magic_constant) and diagonals(square, magic_constant) )
Let’s run the above-mentioned example:
sq = [[0,2,4,6], [6,6,0,0], [1,1,5,5], [5,3,3,1]] magic_square(sq)
Output:
True
Thank you for sparing your valuable time to read this article. You may check out other articles as well:
- Construct a String from another String using Suffix Trie in Python
- Implementing Quick Select in Python
Leave a Reply