-
Notifications
You must be signed in to change notification settings - Fork 1
/
Magic Square.py
93 lines (76 loc) · 1.78 KB
/
Magic Square.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
while True:
try:
d = int(input("Enter the dimensions : "))
break
except:
print("Invalid input")
while d%2 == 0:
try:
d = int(input("Enter an odd number : "))
except:
print("Invalid input")
print()
r = 1
# Creating the square
ms = [d*['u']]
while r != d:
ms.append (d*['u'])
r += 1
r = 0
c = d//2
while True:
try:
sum = int(input("Enter the sum : "))
break
except:
print("Invalid input")
while sum % d != 0:
try:
sum = int(input("The sum needs to be a multiple of the dimensions you entered : "))
except:
print("Invalid input")
y = d*((((c+1)/2)*c)*4)
i=int((sum-y)/d)
# Filling the magic square
for count in range(0, d**2):
# Checking if space is already filled
if ms[r][c] != 'u':
# moving two rows forward
if r == d-2:
r = 0
elif r == d-1:
r = 1
else:
r += 2
# moving to the previous column
if c == 0:
c = d-1
else:
c -= 1
# Filling the space
ms [r][c] = i
# moving to the previous row
if r == 0:
r = d-1
else:
r -= 1
# moving the to next column
c += 1
if c == d:
c = 0
i=i+1
print("\n\n")
i -= 1
dashes = d+1 # Lines
dashes += d*2 # Blank spaces
dashes += d # Digits
for x in ms:
print("-"*dashes)
for y in x:
print("|", y,end=" ")
print("| ")
print("-"*dashes)
print("\n\n")
print("All the numbers are consecutive.")
print("None of the numbers are repeated.")
print("The sum of all the rows, columns and diagonals are equal.")