整数の N*N リストが魔方陣を形成するかどうかを判断するコードがあります。
import itertools
#Function square magic
def magic_square(matrix):
dimension = len(matrix[0])
sum_list = []
#Horizontal code:
sum_list.extend([sum (lines) for lines in matrix])
#Vertical code:
for col in range(dimension):
sum_list.append(sum(row[col] for row in matrix))
#Diagonals code
diagonal1 = 0
for i in range(0,dimension):
diagonal1 +=matrix[i][i]
sum_list.append(diagonal1)
diagonal2 = 0
for i in range(dimension-1,-1,-1):
diagonal2 +=matrix[i][i]
sum_list.append(diagonal2)
if len(set(sum_list))>1:
return False
return True
m=[[7, 12, 1, 14], [2, 13, 8, 11], [16, 3, 10, 5], [9, 6, 15, 4]]
print(magic_square(m))
m=[[2, 7, 6], [9, 5, 1], [4, 3, 8]]
print(magic_square(m))
m=[[2, 7, 6], [9, 5, 1], [4, 3, 7]]
print(magic_square(m))
print("**************************")
#Now, i use itertools like this:
for i in itertools.combinations(range(1,10), 3):
if sum(i) == 15:
print (i)
# I get the combinations each of three numbers with sum 15
私の問題は最後の部分です: 1 から N^2 までの整数のすべての順列を生成し、それぞれを正方形 (N 行と N 列の 2-D リスト) に分割し、関数を使用してすべての魔法を見つけたいと考えています。正方形。私が書いたitertoolsコードは、仕事をする 3 つの数字の組み合わせを見つけますが、正方形を形成するための組み合わせを理解できません。
助けてくれてありがとう@プルーン。
[
1 5 9]
[1 6 8]
[2 4 9]
[2 5 8]
[2 6 7]
[3 4 8]
[3 5 7]
[4 5 6]
正方形を生成する方法一度に 3 つの行列の要素を使用して、True または False であるかどうかを魔法で知ることができますか?
例:
[[1 5 9],[1 6 8], [2 4 9]]
または
[[1 5 9],[1 6 8], [2 5 8]]
または
[[1 5 9],[ 1 6 8]、[2 6 9]]など。