检查4x4网格是否有2个相邻的数字(向上或向下)等于某个数字

时间:2019-06-29 12:25:21

标签: python list

The user has to enter a 4x4 grid of numbers as follows:
[[2,1024,8,8],
 [4,1024,16,32],
 [2,32,64,128],
 [8,256,2,2]]

接下来,要求用户输入一个数字,例如对于这个特定示例,我选择2048。

现在代码需要检查两个相邻框(上或下)的总和是否具有给定数字的加法,在这种情况下为2048,如果是,则该框是正确的,否则为false。 打印结果。

代码必须包含子列表,而不能包含字典或元组等。

好吧,我对python还是比较陌生,并且在线获得了这个问题。 我试着解决这个问题,但无济于事。到目前为止,我创建的只是一个子列表,用于接受输入,并尝试一个接一个地逐个检查,但时间太长。

  • 编辑1:我尝试了一个长代码方法示例代码,但是由于列表索引必须是整数或分片,而不是元组,因此出现了错误。希望也可以缩短代码。

这是代码

a=[[2,1024,8,8],
   [4,1024,16,32],
   [2,32,64,128],
   [8,256,2,2]]

def winning(a):
 for i in range(0,4):
    for j in range(0,4):
        if (i==0):
            if(j==0):
                if a[i,j]+a[(i+1),j]==2048:
                    True
            if(j==3):
                if a[i,j]+a[i+1,j]==2048:
                    True
            if a[i,j]+a[i,j-1]==2048 or a[i,j]+a[i+1,j]==2048 or a[i,j]+a[i,j+1]==2048:
                True
        if(i==1 or i==2):
            if(j==0):
                if a[i,j]+a[i,j+1]==2048 or a[i,j]+a[i-1,j]==2048 or a[i,j]+a[i+1,j]==2048:
                    True
            if(j==3):
                if a[i,j]+a[i-1,j]==2048 or a[i,j]+a[i+1,j]==2048 or a[i,j]+a[i,j-1]==2048:
                    True
            if a[i,j]+a[i,j-1]==2048 or a[i,j]+a[i,j+1]==2048 or a[i,j]+a[i-1,j]==2048 or a[i,j]+a[i+1,j]==2048:
                True
        if(i==3):
             if(j==0):
                if a[i,j]+a[i-1,j]==2048:
                    True
             if(j==3):
                if a[i,j]+a[i-1,j]==2048:
                    True
             if a[i,j]+a[i,j-1]==2048 or a[i,j]+a[i-1,j]==2048 or a[i,j]+a[i,j+1]==2048:
                True
 return false

assert winning(a)

1 个答案:

答案 0 :(得分:1)

最好将代码拆分为更多所需的功能。此外,您还可以为变量添加非硬编码值(除非此矩阵4x4是您打算执行此操作的唯一方法)。

首先,我们找到此矩阵中有多少行,以及每行的长度是否等于一个常量值(并且它们之间没有区别); 然后定义两个函数:

  • sum_up_down,给定一个位置(行的索引和列的索引),给我们一个元组,将元素保持在该位置,其总和为其上限值,其总和为其下限值;

  • find_number仅遍历矩阵,找到每个可能的元组,并在第一个匹配项(number in result,其中number是您的选择,例如2048,而{{1 }}包含三个值的元组。

然后我们打印矩阵并循环,每次查找用户指定的数字。

如果您不需要/想要查找元素(只需上下求和),只需编辑result的返回并删除sum_up_down

element