Вопрос Кэттис «Цифры»: Почему мой первый набор кода превышает лимит времени, а второй — нет?Python

Программы на Python
Anonymous
Вопрос Кэттис «Цифры»: Почему мой первый набор кода превышает лимит времени, а второй — нет?

Сообщение Anonymous »

В настоящее время я решаю задачу на Kattis (https://open.kattis.com/problems/digits).
Описание задачи следующее:
Для любого числа x0 определите последовательность, используя следующую рекурсию xi+1 = количество цифр в десятичном представлении xi
Ваша задача — определить наименьшее положительное число i такое, что xi=xi-1.
Изначально я придумал код A, но после того, как код A не уложился в срок, я немного повозился с кодом, чтобы получить код B.
Пример ввода

Код: Выделить всё

42
5
END
Пример вывода Код А:

Код: Выделить всё

#time limit exceeded
def recurrence_index(prev):
counter = 1
while True:
current = len(str(prev))
if current == prev:
return counter
else:
counter += 1
prev = current

while True:
initial = input().strip()
if initial == 'END':
break
initial = int(initial)
print(recurrence_index(initial))
Код Б:

Код: Выделить всё

def recurrence_index(prev):
counter = 2
while True:
current = len(str(prev))
if current == prev:
return counter
else:
counter += 1
prev = current

while True:
initial = input().strip()
if initial == 'END':
break
l = len(initial)
if l == 1 and int(initial) == 1:
print(1)
else:
print(recurrence_index(l))
К сожалению, я не совсем понимаю, почему код B быстрее, чем код A. Кажется, я случайно пришел к правильному ответу. Если кто-нибудь может помочь объяснить, почему код B быстрее, чем код A, ваша помощь будет очень признательна. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/704 ... imit-but-m

Вернуться в «Python»