Задача #4355
Количество программ
(А. Шуруха) Исполнитель преобразует число на экране. У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Прибавь 1
B. Сдвинь вправо
Первая команда увеличивает число на экране на 1. Вторая команда применяется только к числу, для которого перенос последней
цифры в начало записи даёт большее число, и действует, перенося последнюю цифру в начало записи.
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 102 результатом является число 500?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы AAB при исходном числе 102 траектория состоит из чисел 103, 104, 410.
Решение
Ответ
from functools import *
@lru_cache(None)
def f(c, e):
if c > e: return 0
if c == e: return 1
p = str(c)
r = 0
r += f(c + 1, e) # A
if len(p) >= 2 and int(p[-1] + p[:-1]) > c: r += f(int(p[-1] + p[:-1]), e) # B
return r
print(f(102, 500))