Отладка Ошибка во время выполнения - Hackerrank скрытых тестовых случаев. Проходит первые два теста - PullRequest
0 голосов
/ 03 ноября 2018

Hackerrank Проблема: Учитывая матрицу M * N, где каждая ячейка может иметь значение 0,1 или 2, ячейка со значением 1 может быть преобразована в 2 если у него есть как минимум 3 соседние ячейки со значением 2. Выясните все возможные преобразования за один проход (т.е. преобразованная ячейка не может использоваться для преобразования другой ячейки)

Ограничения: нет

Мой подход:

  1. Сохранение ввода в 2d матрице
  2. Итерация по каждой ячейке и для каждой ячейки со значением 1: я) Получить список соседних ячеек, которые имеют значение 2 (сбросить неверно индексы ячеек, когда текущая ячейка находится в крайних столбцах) ii) Увеличьте POSSIBLE_CONVERSIONS на 1, если размер списка>> 3

Вот мое решение на Python:

import sys
data = sys.stdin.readlines()
dim = data.pop(0)
r = int(dim.split(' ')[0])
c = int(dim.split(' ')[1])
mat = []

def getElem(c, mat, index):
    return mat[int(index/c)][int(index % c)]

for line in data:
    arr = list(map(int, line.split()))
    mat.append(arr)

possibleConversions = 0

for i in range(0,r):
    for j in range(0,c):
        if mat[i][j] != 1:
            continue
        idx = (i * c) + j
        adjIndices = []
        if idx % c == 0:
            adjIndices = [(idx - c), (idx - c + 1), (idx + 1), (idx + c), (idx + c + 1)]
        elif (idx + 1) % c == 0:
            adjIndices = [(idx - c -1), (idx - c), (idx - 1), (idx + c - 1), (idx + c)]
        else :
            adjIndices = [(idx - c -1), (idx - c), (idx - c + 1), (idx - 1), (idx + 1), (idx + c - 1), (idx + c), (idx + c + 1)]
        adjIndices = [index for index in adjIndices if ((index >= 0) and (index < (r*c) and (getElem(c, mat, index) == 2)))]
        if (len(adjIndices) >= 3) :
            possibleConversions += 1

print(possibleConversions)

Это похоже на прохождение 2 тестовых случаев и обнаружение ошибки времени выполнения для остальных 4 скрытых случаев. Любые идеи относительно того, что может быть разрушено?

Я пробовал то же решение в Java, где оно ломается при принятии ввода (используя либо Scanner, либо BufferedReader) для 4 тестовых случаев

(потратили 3 дня на то, чтобы биться головой об стену)

Редактировать 1 : размещение попытки, за исключением блока кода:

if mat[i][j] != 1:
            continue

, кажется, вызывает блок исключения для всех 4 скрытых тестовых случаев. В настоящее время я подозреваю, что при большой матрице выполнение должно быть истекло.

Редактировать 2 : исключить предыдущую теорию, произвольно установив строку или столбец равным 10, если размер строки или столбца> 100, и все еще видя ошибку RT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...