Задачи с Яндекс.Практикума Пробный курс по алгоритмам

Решил порешать задачки с Яндекс.Практикума по алгоритмам. Добрался до алгоритма со спиральным выводом массива. Суть задачи: Первая строка содержит целое нечётное число m в диапазоне от 1 до 1000 — количество строк и столбцов матрицы. В каждой из следующих m строк даны m целых чисел в диапазоне от -1000 до 1000, разделённых пробелом. Формат вывода Нужно вывести значения в матрице, начиная с центра по спирали. Движение вверх, далее по часовой стрелке. Каждое число выводится в отдельной строке. Денёк обмозговав написал такой код:

def spiral(m, matrix):
    result = ''
    x = m // 2
    y = m // 2
    s = m - 1
    for i in range(0, m ** 2):
        result += f'{matrix[y][x]}\n'
        sum = x + y
        if x <= y:
            if sum <= s:
                y -= 1
            else:
                x -= 1
        elif x > y:
            if sum < s:
                x += 1
            else:
                y += 1
    return result

f = open('input.txt', 'r')
file = f.readlines()
f.close()
m=int(file.pop(0))
mass = [[int(n) for n in string.rstrip().split(' ')] for string in file]
del file
o = open('output.txt','w')
o.write(spiral(m,mass))
o.close()

Код выполняет требуемые действия, однако проверку по памяти не проходит. Так как зелёный, не очень представляю, как Python работает с памятью. Пробовал удалять списки после работы с ними, вынес запись матрицы в генератор, вынес проход по спирали в функцию, сократил условия. Может кто-то что посоветует?


Ответы (0 шт):