#23

x - стартовое число
y - конечное

'''Исполнитель преобразует число на экране.
У исполнителя есть две команды, которым присвоены номера:
A.    Прибавить 1
B.    Умножить на 2
Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 4 результатом 
является число 15, и при этом траектория вычислений содержит числа 8 и 10? 
Траектория вычислений программы – это последовательность результатов выполнения 
всех команд программы. Например, для программы ABA при исходном числе 
8 траектория состоит из чисел 9, 18, 19.'''
def f(x,y):
    if x > y: - вот тут пишем еще число если не нужно в него попасть, например and x == 15
        return 0
    if x == y:
        return 1
    if x < y:
        return f(x + 1,y)+f(x * 2, y) - тут пишем действия, обязательно между ними ставим +


print(f(4,8) * f(8,10) * f(10,15)) '''- если нужно попасть в какие то числа, строим маршрут отрезками заходя в ними
результаты перемножаем!!!'''

'''Исполнитель преобразует число на экране. У исполнителя есть три команды,
 которые обозначены латинскими буквами:

А. Вычесть 2
В. Вычесть 3
С. Найти целую часть от деления на 5

Программа для исполнителя — это последовательность команд.
Сколько существует программ, для которых при исходном числе 41 результатом
 является число 5, при этом траектория вычислений не содержит числа 20 и 
 содержит 10?
Траектория вычислений программы — это последовательность результатов 
выполнения всех команд программы.
Например, для программы СВА при исходном числе 51 траектория будет
 состоять из чисел 10, 7, 5.'''


def f(x,y): #11841
    if x < y or x == 20:
        return 0
    if x == y:
        return 1
    if x > y:
        return f(x - 2 ,y) + f(x - 3 ,y) + f(x // 5, y)

print(f(41,10) * f(10,5))


'''Исполнитель преобразует число на экране.
У исполнителя есть три команды, которым присвоены номера:
A. Прибавить 2
B. Прибавить 3
C. Умножить на 2
Программа для исполнителя – это последовательность команд.
Сколько существует программ, для которых при исходном числе 3 результатом является число 20, а последняя в них команда - A или С?'''
# 13830
def f(x,y,z):
    if x > y:
        return 0
    if x == y and (z[-1] == 'A' or z[-1] == 'C'):
        return 1
    return f(x + 2,y,z + 'A') + f(x + 3, y, z + 'B') + f(x * 2, y, z + 'C')

print(f(3,20,''))