沙漏阵列提交错误

时间:2016-10-09 12:08:08

标签: arrays python-3.x

我正在尝试解决hackerrank上的沙漏问题。你可以在这里找到问题的详细信息(https://www.hackerrank.com/challenges/2d-array)。

在我的机器上,代码工作正常并且即使对于给hackerrank提供错误的测试用例也能给出正确的结果。

以下是代码:

maxSum = -70
#hourglass = []
arr = [[int(input()) for x in range(0,6)] for y in range(0,6)]
for row in range(0,6):
    for col in range(0,6):
        if (row + 2) < 6 and (col + 2) < 6 :
            sum = arr[row][col] + arr[row][col+1] + arr[row][col+2] + arr[row+1][col+1] + arr[row+2][col] + arr[row+2][col+1] + arr[row+2][col+2]
            if sum > maxSum:
                #hourglass.append(arr[row][col])
                #hourglass.append(arr[row][col+1])
                #hourglass.append(arr[row][col+2])
                #hourglass.append(arr[row+1][col+1])
                #hourglass.append(arr[row+2][col])
                #hourglass.append(arr[row+2][col+1])
                #hourglass.append(arr[row+2][col+2])
                maxSum = sum
print(maxSum)
#print(hourglass)

运行代码时出现以下错误:

Traceback (most recent call last):
  File "solution.py", line 4, in <module>
    arr = [[int(input()) for x in range(0,6)] for y in range(0,6)]
  File "solution.py", line 4, in <listcomp>
    arr = [[int(input()) for x in range(0,6)] for y in range(0,6)]
  File "solution.py", line 4, in <listcomp>
    arr = [[int(input()) for x in range(0,6)] for y in range(0,6)]
ValueError: invalid literal for int() with base 10: '1 1 1 0 0 0'

引发错误的测试用例是:

1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 9 2 -4 -4 0
0 0 0 -2 0 0
0 0 -1 -2 -4 0 

6 个答案:

答案 0 :(得分:0)

在C#中,我可以为您提供一个非常简单的着名沙漏问题的解决方案。以下解决方案已针对10个测试用例进行了测试。

class Class1
{ 
   static int[][] CreateHourGlassForIndexAndSumIt(int p, int q, int[][] arr)
    {
        int[][] hourGlass = new int[3][];

        int x = 0, y = 0;
        for (int i = p; i <= p + 2; i++)
        {
            hourGlass[x] = new int[3];
            int[] temp = new int[3];
            int k = 0;
            for (int j = q; j <= q + 2; j++)
            {
                temp[k] = arr[i][j];
                k++;
            }
            hourGlass[x] = temp;
            x++;
        }

        return hourGlass;
    }

    static int findSumOfEachHourGlass(int[][] arr)
    {
        int sum = 0;
        for (int i = 0; i < arr.Length; i++)
        {
            for (int j = 0; j < arr.Length; j++)
            {
                if (!((i == 1 && j == 0) || (i == 1 && j == 2)))
                    sum += arr[i][j];
            }

        }

        return sum;
    }

     static void Main(string[] args)
    {
        int[][] arr = new int[6][];
        for (int arr_i = 0; arr_i < 6; arr_i++)
        {
            string[] arr_temp = Console.ReadLine().Split(' ');
            arr[arr_i] = Array.ConvertAll(arr_temp, Int32.Parse);
        }

        int[] sum = new int[16];
        int k = 0;
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                int[][] hourGlass = CreateHourGlassForIndexAndSumIt(i, j, arr);
                sum[k] = findSumOfEachHourGlass(hourGlass);
                k++;
            }
        }
        //max in sum array
        Console.WriteLine(sum.Max());

    }


}

谢谢, Ankit Bajpai

答案 1 :(得分:0)

考虑尺寸为NxN的数组

indexarr = [x for x in xrange(N-2)]    
summ=0
for i in indexarr:
    for j in indexarr:
        for iter_j in xrange(3):
            summ += arr[i][j+iter_j] + arr[i+2][j+iter_j]
        summ += arr[i+1][j+1] 
        if i == 0 and j==0:
            maxm=summ
        if summ > maxm:
            maxm = summ
        summ = 0
print maxm  

答案 2 :(得分:0)

Python解决方案:     #!/ bin中/ python3

import sys
arr   = []
matt  = []
v_sum = 0
for arr_i in range(6):
   arr_t = [int(arr_temp) for arr_temp in input().strip().split(' ')]
   arr.append(arr_t)
for i in range(len(arr)-2):
    for j in range(len(arr)-2):
        v_sum = arr[i][j]+arr[i][j+1]+arr[i][j+2]+arr[i+1][j+1]+arr[i+2][j]+arr[i+2][j+1] + arr[i+2][j+2]
        matt.append(v_sum)

total = max(matt)
print (total)

答案 3 :(得分:0)

这就是我的解决方法。

def gethourglass(matrix, row, col):
    sum = 0
    sum+= matrix[row-1][col-1]
    sum+= matrix[row-1][col]
    sum+= matrix[row-1][col+1]
    sum+= matrix[row][col]
    sum+= matrix[row+1][col-1]
    sum+= matrix[row+1][col]
    sum+= matrix[row+1][col+1]
    return sum

def hourglassSum(arr):
    maxTotal = -63
    for i in range(1, 5):
        for j in  range(1, 5):
            total = gethourglass(arr, i, j)
            if total > maxTotal:
                maxTotal = total
    return maxTotal

答案 4 :(得分:0)

很少有测试用例失败,因为我们忽略了给定问题的约束。
例如,
约束
1. -9 <= arr [i] [j] <= 9,这意味着给定数组的元素将始终在-9到9之间,不能为10或其他任何值。
2. 0 <= i,j <= 5

因此,最大总和将在范围内(-63至63)。
保持maxSumValue根据给定的约束,否则您可以使用list,附加所有总和值,然后返回max list值。

希望这有助于通过所有测试用例。

答案 5 :(得分:0)

这种算法的吸引力与CNN (卷积神经网络)具有相似性。除了少数例外,例如:3x3内核大小具有固定的稀疏点(即[size(3,1),size(1,1),size(3,1)]第二行由角/边定界) ,步幅/滑动度始终为1(但实际上,您可能会更改为> = 1(例如,深度CNN减少了NN的滤波器数量,这是一种启发式正则化方法,以避免过拟合),并且未考虑填充(即如果一个列表到达其结尾,而不是继续到下一行(列表),它将下一个范围移动到列表的存在位置,例如[0,1,2,3]: [0,1,2]-> [1,2,3]-> [2,3,0]-> [3,0,1])。

def hourglassSum(arr):
    Kernel_size = (3, 3)
    stride = 1
    memory = []

    for i in range(0,Kernel_size[0]+1, stride):
        for j in range(0, Kernel_size[1]+1, stride):
            hour_glass_sum = sum(arr[i][j:3+j]) + arr[i+1][1+j] + sum(arr[i+2][j:3+j])
            memory.append(hour_glass_sum)

    return max(memory)