Не сходится ответ
Мое решение:
def f(a,b,k,t):
if (a>(b+2)) or (k==2) or ((a%10)==5):
return 0
if a == b:
if 37 in t:
return 1
else:
return 0
if a!=b:
return f(a-1,b,k+1,t+[a])+f(a-2,b,k+1,t+[a])+f(a+5,b,0,t+[a])+f(a*2,b,0,t+[a])
print(f(7,50,0,[]))
Предложенное решение на сайте:
from functools import cache
@cache
def f( start, end, lastCmd = 0, hit37 = False ):
if start > end+2 or start == [15, 25, 35, 45]: return 0
if start == end: return hit37
if start == 37: hit37 = True
total = 0 if lastCmd == 1 else \
f( start-1, end, 1, hit37 ) + f( start-2, end, 1, hit37 )
return total + \
f( start+5, end, 3, hit37 ) + f( start*2, end, 3, hit37 )
count = f(7, 50)
print( count )
Объективно содержит 2 ошибки в строке if start > end+2 or start == [15, 25, 35, 45]: return 0
1) Список [15, 25, 35, 45] не учитывает все варианты значения переменной start. По заданию не должно быть кратно 5, список должен быть таким: [5, 15, 25, 35, 45]
2) Переменная start не должна принимать какое-либо значение из списка выше. С чего бы ее сравнивают со списком? Тут же нужно in использовать, не?
Если внести изменеия и прописать if start > end+2 or start in [5,15, 25, 35, 45]: return 0
Ответ этой программы будет 8538, что совпадает с ответом моей программы.