2301.py

Исполнитель преобразует число на экране. У исполнителя есть три команды, которые обозначены латинскими буквами: A. Вычесть 3 B. Вычесть 4 C. Найти целую часть от деления на 3 Программа для исполнителя — это последовательность команд. Сколько существует программ, для которых при исходном числе 47 результат — число 6, при этом траектория вычислений не содержит число 25 и содержит 15? Траектория вычислений программы — это последовательность результатов выполнения всех команд программы. Например, для программы CBA при исходном числе 105 траектория будет состоять из чисел 35, 31, 28.
"""
Исполнитель преобразует число на экране. 
У исполнителя есть три команды, которые обозначены латинскими буквами:

A. Вычесть 3
B. Вычесть 4
C. Найти целую часть от деления на 3

Программа для исполнителя — это последовательность команд.

Сколько существует программ, для которых 
при исходном числе 47 результат — число 6, 
при этом траектория вычислений не содержит число 25 и содержит 15?

Траектория вычислений программы — это последовательность результатов 
выполнения всех команд программы. Например, для программы CBA 
при исходном числе 105 траектория будет состоять из чисел 35, 31, 28.
"""

def F(s, end, netu):
    if s == end:
        return 1
    if s < end or s == netu:   # промахнулись ниже цели или попали в запрет
        return 0
    return F(s - 3, end, netu) + F(s - 4, end, netu) + F(s // 3, end, netu)

print(F(47, 15, 25) * F(15, 6, 25))
"""
Исполнитель преобразует число на экране. 
У исполнителя есть три команды, которые обозначены латинскими буквами:

A. Вычесть 3
B. Вычесть 4
C. Найти целую часть от деления на 3

Программа для исполнителя — это последовательность команд.

Сколько существует программ, для которых 
при исходном числе 47 результат — число 6, 
при этом траектория вычислений не содержит число 25 и содержит 15?

Траектория вычислений программы — это последовательность результатов 
выполнения всех команд программы. Например, для программы CBA 
при исходном числе 105 траектория будет состоять из чисел 35, 31, 28.
"""

def F(s, end, netu):
    if s == end:
        return 1
    if s < end or s == netu:   # промахнулись ниже цели или попали в запрет
        return 0
    return F(s - 3, end, netu) + F(s - 4, end, netu) + F(s // 3, end, netu)

print(F(47, 15, 25) * F(15, 6, 25))

Репозиторий на GitHub