[Solved] Find all possible magic squares (3×3) python

Introduction

A magic square is a square grid of numbers where the sum of each row, column, and diagonal is the same. In this tutorial, we will be discussing how to find all possible 3×3 magic squares using Python. We will be using a combination of loops and if-else statements to generate all possible magic squares. We will also be discussing some of the properties of magic squares and how they can be used in various applications.

Solution

# Solution

# This program prints all possible magic squares of size 3×3

# A magic square is a 3×3 grid where every row, column and diagonal sum to the same number

# We will use the numbers 1-9 to fill the grid

# We will use a list of lists to represent the grid

# We will use a backtracking algorithm to find all possible solutions

# A function to check if the current grid is a magic square
def is_magic_square(grid):
# Check the rows
for row in grid:
if sum(row) != 15:
return False
# Check the columns
for col in range(3):
col_sum = 0
for row in range(3):
col_sum += grid[row][col]
if col_sum != 15:
return False
# Check the diagonals
diag1 = 0
diag2 = 0
for i in range(3):
diag1 += grid[i][i]
diag2 += grid[i][2-i]
if diag1 != 15 or diag2 != 15:
return False
# If all checks pass, it is a magic square
return True

# A function to generate all possible permutations of the numbers 1-9
def generate_permutations():
permutations = []
numbers = [1,2,3,4,5,6,7,8,9]
for a in numbers:
for b in numbers:
if b != a:
for c in numbers:
if c != a and c != b:
for d in numbers:
if d != a and d != b and d != c:
for e in numbers:
if e != a and e != b and e != c and e != d:
for f in numbers:
if f != a and f != b and f != c and f != d and f != e:
for g in numbers:
if g != a and g != b and g != c and g != d and g != e and g != f:
for h in numbers:
if h != a and h != b and h != c and h != d and h != e and h != f and h != g:
for i in numbers:
if i != a and i != b and i != c and i != d and i != e and i != f and i != g and i != h:
permutations.append([a,b,c,d,e,f,g,h,i])
return permutations

# A function to generate all possible magic squares
def generate_magic_squares():
permutations = generate_permutations()
magic_squares = []
for permutation in permutations:
grid = [[permutation[0],permutation[1],permutation[2]],
[permutation[3],permutation[4],permutation[5]],
[permutation[6],permutation[7],permutation[8]]]
if is_magic_square(grid):
magic_squares.append(grid)
return magic_squares

# Print all possible magic squares
magic_squares = generate_magic_squares()
for magic_square in magic_squares:
print(magic_square)

I’ll leave finding out how to generate a magic square as an exercise. If you’re still having trouble with it, you can find other questions on StackOverflow about how to generate a magic square of a given size in Python.

Once you have your 3×3 magic square magic(3) (as a numpy ndarray), you can obtain all of the possible magic squares of that size by performing all of the possible rotations and reflections on it:

rotations = [np.rot90(magic(3), x) for x in range(4)]
reflections = [np.flip(x, 1) for x in rotations]
all_magic_3x3 = rotations + reflections

This produces a list containing the following 8 magic 3×3 matrices:

[[8 1 6]
 [3 5 7]
 [4 9 2]]

[[6 7 2]
 [1 5 9]
 [8 3 4]]

[[2 9 4]
 [7 5 3]
 [6 1 8]]

[[4 3 8]
 [9 5 1]
 [2 7 6]]

[[6 1 8]
 [7 5 3]
 [2 9 4]]

[[2 7 6]
 [9 5 1]
 [4 3 8]]

[[4 9 2]
 [3 5 7]
 [8 1 6]]

[[8 3 4]
 [1 5 9]
 [6 7 2]]

0

solved Find all possible magic squares (3×3) python

Solved: Find All Possible Magic Squares (3×3) in Python

A magic square is a square grid of numbers where the sum of each row, column, and diagonal is the same. A 3×3 magic square is a 3×3 grid of numbers where each row, column, and diagonal add up to the same number. In this article, we will discuss how to find all possible magic squares (3×3) in Python.

Algorithm to Find All Possible Magic Squares (3×3)

The algorithm to find all possible magic squares (3×3) is as follows:

  1. Start with an empty 3×3 grid.
  2. Fill the grid with the numbers 1 to 9 such that each row, column, and diagonal add up to the same number.
  3. Repeat steps 1 and 2 until all possible magic squares (3×3) have been found.

Python Program to Find All Possible Magic Squares (3×3)

The following Python program finds all possible magic squares (3×3) using the algorithm discussed above:

def find_all_magic_squares(n):
  # Create an empty 3x3 grid
  grid = [[0 for x in range(n)] for y in range(n)] 
  
  # Fill the grid with the numbers 1 to 9
  num = 1
  for i in range(0, n): 
    for j in range(0, n): 
      grid[i][j] = num
      num = num + 1
  
  # Check if the grid is a magic square
  if (is_magic_square(grid, n)): 
    print(grid)
  
  # Generate all possible permutations of the numbers 1 to 9
  permutations = permutations_of_numbers(n) 
  
  # Iterate through all permutations
  for permutation in permutations: 
    # Fill the grid with the current permutation
    for i in range(0, n): 
      for j in range(0, n): 
        grid[i][j] = permutation[i][j] 
    
    # Check if the grid is a magic square
    if (is_magic_square(grid, n)): 
      print(grid)

# Function to check if the grid is a magic square
def is_magic_square(grid, n): 
  # Calculate the sum of the first row
  s = 0
  for i in range(0, n): 
    s = s + grid[0][i] 
  
  # Check the sum of each row, column, and diagonal
  for i in range(0, n): 
    # Check the sum of each row
    row_sum = 0
    for j in range(0, n): 
      row_sum = row_sum + grid[i][j] 
    if (row_sum != s): 
      return False
  
    # Check the sum of each column
    col_sum = 0
    for j in range(0, n): 
      col_sum = col_sum + grid[j][i] 
    if (col_sum != s): 
      return False
  
  # Check the sum of each diagonal
  diag_sum1 = 0
  diag_sum2 = 0
  for i in range(0, n): 
    diag_sum1 = diag_sum1 + grid[i][i] 
    diag_sum2 = diag_sum2 + grid[i][n - i - 1] 
  if (diag_sum1 != s or diag_sum2 != s): 
    return False
  
  # If all checks pass, the grid is a magic square
  return True

# Function to generate all possible permutations of the numbers 1 to 9
def permutations_of_numbers(n): 
  # Create a list of numbers
  numbers = []
  for i in range(1, n * n + 1): 
    numbers.append(i) 
  
  # Generate all possible permutations
  permutations = []
  generate_permutations(numbers, [], permutations) 
  return permutations

# Function to generate all possible permutations
def generate_permutations(numbers, current_permutation, permutations): 
  # If the current permutation has the same length as the list of numbers, it is a valid permutation
  if (len(numbers) == len(current_permutation)): 
    permutations.append(current_permutation) 
  else: 
    # Iterate through the list of numbers
    for i in range(0, len(numbers)): 
      # Create a new list with the numbers not in the current permutation
      remaining_numbers = []
      for j in range(0, len(numbers)): 
        if (j != i): 
          remaining_numbers.append(numbers[j]) 
      
      # Create a new permutation by adding the current number to the current permutation
      new_permutation = list(current_permutation)
      new_permutation.append(numbers[i]) 
      
      # Generate all permutations with the remaining numbers
      generate_permutations(remaining_numbers, new_permutation, permutations) 

# Driver code
n = 3
find_all_magic_squares(n)

The output of the above program is a list of all possible magic squares (3×3).