Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
A. Прибавь 1
B. Измени цифру
Первая из этих команд увеличивает число на экране на 1. Вторая команда применяется только к числу, у которого в записи присутствует хотя бы одна цифра 1, и действует, заменяя число на экране числом, в котором каждая цифра 1 заменена на цифру 2.
Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 11 результатом является число 92?
Траектория вычислений программы — это последовательность результатов выполнения всех команд программы.
Например, для программы ABA при исходном числе 13 траектория состоит из чисел 14, 24, 25.
Способ 1 (С рекурсией)
🔹 Шаг 1. Идея решения задачи
📌 Нужно посчитать количество программ, которые:
🔹 Шаг 2. Функция подсчёта количества программ
def f(x, y):
if x > y: return 0
if x == y:
return 1
return f(x + 1, y) + (f(int(str(x).replace('1', '2')), y) if '1' in str(x) else 0)
print(f(11, 92))
📌 Функция f(x, y) считает, сколько программ переводят число x в число y, соблюдая ограничения.
🔹 Шаг 3. Запрещённые и граничные случаи
if x > y: return 0
📌 Объяснение:
🔹 Шаг 4. Условие успешного завершения
if x == y:
return 1
📌 Если текущее число равно целевому, значит программа успешно завершилась и найден один корректный путь.
🔹 Шаг 5. Переходы по командам исполнителя
return f(x + 1, y) + (f(int(str(x).replace('1', '2')), y) if '1' in str(x) else 0)
📌 Здесь учитываются все возможные команды исполнителя: A: +1, B: заменить все 1 на 2. Складываем количество программ для всех вариантов.
🔹 Финальный шаг. Вывод ответа
print(f(11, 92))
📌 Выводим количество программ, переводящих 11 в 92: print(f(11, 92)).