派克广场优化

时间:2016-04-18 19:54:56

标签: python

这里的parker square指的是包含整数的9x9网格。在对所有整数求平方后,每行,每列和每个对角线的总和是相同的。 (网格中的所有单元格不能包含相同的数字)。

https://www.youtube.com/watch?v=aOT_bG-vWyg 关于主题的5分钟视频

我正在尝试解决这个问题,但我需要一些帮助来优化我当前的解决方案,这非常业余。

首先,我将9x9网格中的所有单元命名为变量a-i 然后,我分别计算每列,行和对角线的平方和,并检查它们是否都相等一次。

我的代码如下所示是Python,有什么建议吗?

for a in range(1,10):
    for b in range(1,10):
        for c in range(1,10):
            for d in range(1,10):
                for e in range(1,10):
                    for f in range(1,10):
                        for g in range(1,10):
                            for h in range(1,10):
                                for i in range(1,10):
                                     j=a**2+b**2+c**2
                                     k=d**2+e**2+f**2
                                     l=g**2+h**2+i**2
                                     m=a**2+d**2+g**2
                                     n=b**2+e**2+h**2
                                     o=c**2+f**2+i**2
                                     p=a**2+e**2+i**2
                                     q=c**2+e**2+g**2
                                     if j==k and k==l and l==m and m==n and n==o and o==p and p==q:
                                         print(a)
                                         print(b)
                                         print(c)
                                         print(d)
                                         print(e)
                                         print(f)
                                         print(g)
                                         print(h)
                                         print(i)
                                     break

2 个答案:

答案 0 :(得分:0)

您的代码是否有效? (这可能是您的第一笔业务。)

一些建议......

1)你认为这可能与魔术广场相似吗?有一些方法可以构建那些可能有帮助的方法,例如https://plus.maths.org/content/anything-square-magic-squares-sudoku

2)由于你不能两次包含相同的数字,如果两个数字相同,也许你可以退出循环。这比平方和求和更快。

3)你可以考虑减少力量。如果两行中的数字加起来相同,它们的平方和是否也加起来相同?

4)你是否可以置换矢量[1,2,3,4,5,6,7,8,9],而不是通过所有999,999,999组合强力进行蛮力?这是关于python排列的一个很好的问题:How to generate all permutations of a list in Python

答案 1 :(得分:0)

根据rajah9的回答,确认您的代码是否确实有效应该是第一要务。从外观上看,您的代码将无法工作,因为它永远不会检查关键条件:

“网格中的所有单元格不能包含相同的数字。”

,要纠正这一点,请改行

if j==k and k==l and l==m and m==n and n==o and o==p and p==q:



应扩展到

if j==k and k==l and l==m and m==n and n==o and o==p and p==q: and a!=b and a!=c and a!=d
# and so on until all the 9 cells have been catered for