Как изменить/ сократить код, чтобы при проверке он не превышал лимит по времени?
from math import ceil
N = int(input())
m = ceil(N / 2)
lst = []
for i in range(N):
lst.append([' '] * N)
x = 0
y = N - 1
k = 0
while y != m:
if k % 2 == 0:
while y > 0:
lst[x][y] = '*'
if y >= 2 and lst[x][y - 2] == '*':
break
y -= 1
while x < N - 1:
lst[x][y] = '*'
if x < N - 2 and lst[x + 2][y] == '*':
break
x += 1
else:
while y < N - 1:
if y < N - 2 and lst[x][y + 2] == '*':
break
lst[x][y] = '*'
y += 1
while x > 0:
lst[x][y] = '*'
if x >= 2 and lst[x - 2][y] == '*':
break
x -= 1
k += 1
for i in range(N):
print(*lst[i])
код рабочий , но при последнем тесте пишет, что превышает лимит по времени, что делать вообще в таких случаях? Просто первый раз такое
ограничения по времени 1 секунда,а как можно видеть со скрина , программа выполняется в 1 секунду 92 милисекунды
Ответы (3 шт):
Автор решения: марат
→ Ссылка
Как я понял там не 1092 милисекунд, а бесконечность, они просто скинули бесконечный цикл. у меня получилось так:
from math import ceil
N = int(input())
m = ceil(N / 2)
lst = []
for i in range(N):
lst.append([' '] * N)
x = 0
y = N - 1
k = 0
if N == 1:
print('*')
else:
while k < m:
if k % 2 == 0:
while y > 0:
lst[x][y] = '*'
if y >= 2 and lst[x][y - 2] == '*':
break
y -= 1
while x < N - 1:
lst[x][y] = '*'
if x < N - 2 and lst[x + 2][y] == '*':
break
x += 1
else:
while y < N - 1:
lst[x][y] = '*'
if y < N - 2 and lst[x][y + 2] == '*':
break
y += 1
while x > 0:
lst[x][y] = '*'
if x >= 2 and lst[x - 2][y] == '*':
break
x -= 1
k += 1
for i in range(N):
print(*lst[i])
Автор решения: Zhihar
→ Ссылка
у вас медленный вывод, попробуйте сначала преобразовать вывод в строку и вывеcти, например так:
for line in lst:
print(' '.join(line))
или так:
print('\n'.join(' '.join(line) for line in lst))
Автор решения: Mike
→ Ссылка
Не думаю, что так сильно быстрее, но так по крайней мере несколько лаконичнее:
N = int(input())
lst = []
for i in range(N):
lst.append([' '] * N)
x = 0
y = -1
dxa = [0, 1, 0, -1]
dya = [1, 0, -1, 0]
for i in range(0, N-1):
dx = dxa[ i % 4 ]
dy = dya[ i % 4 ]
for j in range(N - (i//2)*2 - 1):
x += dx
y += dy
lst[y][x]='*'
print('* ' * N)
for i in range(N-1):
print(*lst[i])

