Задачи с Яндекс.Практикума Пробный курс по алгоритмам
Решил порешать задачки с Яндекс.Практикума по алгоритмам. Добрался до алгоритма со спиральным выводом массива. Суть задачи: Первая строка содержит целое нечётное число 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 работает с памятью. Пробовал удалять списки после работы с ними, вынес запись матрицы в генератор, вынес проход по спирали в функцию, сократил условия. Может кто-то что посоветует?