我有一些代碼,將確定整數N * N列表形成一個魔術方陣:幻方蟒蛇,使用itertools
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列的正方形 - 二維列表 - 並使用我的函數查找所有幻方。我寫的代碼找到了3個數字的組合,可以完成這項工作,但我無法弄清楚組合形成正方形。
感謝@Prune的幫助。
如果我有:
[1 5 9]
[1 6 8]
[2 4 9]
[2 5 8]
[2 6 7]
[3 4 8]
[3 5 7]
[4 5 6]
我該如何生成一個方形魔術並知道它是真的?錯誤,一次使用三個矩陣元素?
實施例:
[[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]]等等等等。
...你有問題嗎?請閱讀[問]。 – jonrsharpe
我明白要求...給我幾分鐘的時間來編輯和澄清。 – Prune
感謝@Prune的幫助。 – Andreas