作为一个实验,我试图创建一个神奇的正方形程序,用九个数字检查每个可能的正方形对于那些不知道的人来说,魔方是一个由1-9个数字组成的3x3网格,其中每一行、每一列和每一对角线相加为15。例如:
我怎么用一张有lua的桌子来检查每一个方块呢?我从下表开始:
local sq = {
1, 1, 1,
1, 1, 1
1, 1, 1
}
我怎样才能按正确的顺序检查每张桌子?我可以把我的想法写在纸上,但我不完全确定如何把它翻译成代码。我已经创建了一个函数来检查正方形是否有“魔力”(如下),但是我不确定如何以正确的方式增加每个数字。
local isMagic = function(s)
return (
s[1] + s[2] + s[3] == 15 and
s[4] + s[5] + s[6] == 15 and
s[7] + s[8] + s[9] == 15 and
s[1] + s[4] + s[7] == 15 and
s[2] + s[5] + s[8] == 15 and
s[3] + s[6] + s[9] == 15 and
s[1] + s[5] + s[9] == 15 and
s[3] + s[5] + s[7] == 15
)
end
最佳答案
根据我在这里看到的情况,有三种模式:
1) if we can define step by 3, we compare columns:
sum(tab[x] for x in range(step)) == sum(tab[x] for x in xrange(step+1,step*2))== sum(tab[x] for x in xrange(2*step+1,step*3))
2) raws:
sum(tab[x] for x in range(step*step) if x%step==0) == sum(tab[x] for x in range(step*step) if x%step==1)== sum(tab[x] for x in range(step*step) if x%step==2) ===> till we x%step== step-1
3) Diagonales:
sum(tab[x] for x in range(step*step) if x%(step+1)==0) == sum(tab[x] for x in range(step*step) if x%(step+1)==step-1)