🎯 До ЕГЭ по информатике:
--дней
:
--часов
:
--минут
:
--секунд
23

Количество программ

Рекурсивный подсчёт путей. Промежуточные, ограничения, последняя команда.

Python
# Базовый
def f(x, y):
    if x > y: return 0
    if x == y: return 1
    return f(x+1, y) + f(x*2, y)

# Промежуточные числа — перемножаем
print(f(4,8) * f(8,10) * f(10,15))

# С ограничением (запрет числа)
def f(x, y):
    if x < y or x == 20: return 0
    if x == y: return 1
    return f(x-2, y) + f(x-3, y) + f(x//5, y)
Способ 2
# С последней командой
def f(x, y, z):
    if x > y: return 0
    if x == y and z[-1] == 'A': return 1
    if x == y: return 0
    return f(x+2,y,z+'A') + f(x+3,y,z+'B')

# Не более K команд подряд
from functools import lru_cache
@lru_cache(None)
def f(x, y, last, cnt):
    if x > y: return 0
    if x == y: return 1
    r = 0
    for cmd, nx in [('A', x+1), ('B', x*2)]:
        c = cnt+1 if cmd == last else 1
        if c <= 3:  # не более 3 подряд
            r += f(nx, y, cmd, c)
    return r

📚 Теория

Подсчёт траекторий. Рекурсия с мемоизацией.