Skip to content

Instantly share code, notes, and snippets.

@kitten-owner
Last active February 15, 2021 14:11
Show Gist options
  • Select an option

  • Save kitten-owner/11245bd50ad899cb83a13062c7aa74a1 to your computer and use it in GitHub Desktop.

Select an option

Save kitten-owner/11245bd50ad899cb83a13062c7aa74a1 to your computer and use it in GitHub Desktop.
#У исполнителя Калькулятор три команды, которым присвоены номера:
#1. прибавь 1
#2. умножь на 2
#3. умножь на 3
#Сколько есть программ, которые число 1 преобразуют в число 18?
def numProg( start, x ):
if start == x: # если цель достигнута, то
return 1 # завершить функцию, посчитав цепочку (программу)
if start > x: # если перелет, то
return 0 # завершить функцию, не считая цепочку
if start<x: #продолжаем строить дерево
return numProg(start+1,x) + numProg(start*2,x) + numProg(start*3,x)
print( numProg(1,18) )
#Исполнитель М17 преобразует число на экране. У исполнителя есть три команды, которым присвоены номера:
#1. Прибавить 1
#2. Прибавить 2
#3. Умножить на 3
#Сколько существует программ, для которых при исходном числе 2 результатом является число 12 и
#при этом траектория вычислений содержит числа 8 и 10?
def numProg( start, x ):
if start == x:
return 1
if start > x:
return 0
if start<x:
return numProg(start+1,x) + numProg(start+2,x) + numProg(start*3,x)
print( numProg(2,8)*numProg(8,10)*numProg(10,12)) #Если траектория содержит точки,
#то можно представить как метод интервалов с пуcтыми точками
#Исполнитель Июнь15 преобразует число на экране. У исполнителя есть две команды, которым присвоены номера:
#1. Прибавить 1
#2. Умножить на 2
#Сколько существует программ, для которых при исходном числе 2 результатом является число 29 и
#при этом траектория вычислений содержит число 14 и не содержит числа 25?
def numProg( start, x ):
if start == x:
return 1
if start == 25 or start > x: #Если x=25 или перелет, то завершить функцию, не считая цепочку
return 0
if start<x:
return numProg(start+1,x) + numProg(start*2,x)
print( numProg(2,14)*numProg(14,29))
#У исполнителя Удвоитель две команды, которым присвоены номера:
#1. Прибавить 1
#2. Умножить на 2
#Сколько существует программ, преобразующих число 4 в число 24, предпоследней командой которых является команда «1»?
def numProg( start, x ):
if start == x:
return 1
if start > x:
return 0
if start<x:
return numProg(start+1,x) + numProg(start*2,x)
print( numProg(4,11)+numProg(4,22))
#1)Итак, мы знаем предпоследнюю команду – 1, при этом последняя команда может быть любая – 1 или 2,
#выходит, что нужно получить количество всех программ вида «*11» и «*12», где звёздочка обозначает любые команды
#2)Если программа заканчивается на «11», то до выполнения цепочки «11» у нас было число 24 – 1 – 1 = 22;
#поэтому нужно найти число программ для преобразования 4 в 22
#3)Теперь рассматриваем случай, когда программа заканчивается на «12», это значит, что до выполнения цепочки «12»
#у нас было число (24/ 2) – 1 = 11; поэтому нужно найти число программ для преобразования 4 в 11
#У исполнителя Калькулятор две команды, которым присвоены номера:
#1. прибавь 1
#2. увеличь число десятков на 1
#Например: при помощи команды 2 число 23 преобразуется в 33. Если перед выполнением команды 2 вторая с конца цифра равна 9, она не изменяется.
#Сколько есть программ, которые число 11 преобразуют в число 27?
def numProg(start,finish):
if start==finish:
return 1
if start>finish:
return 0
if start<finish:
return numProg(start+1,finish)+numProg(start+10,finish)
print(numProg(11,27))
#У исполнителя Калькулятор две команды, которым присвоены номера:
#1. прибавь 1
#2. увеличь каждый разряд числа на 1
#Например, число 23 с помощью команды 2 превратится в 34, а 29 в 39 (так как младший разряд нельзя увеличить).
#Если перед выполнением команды 2 какая-либо цифра равна 9, она не изменяется. Сколько есть программ,
#которые число 25 преобразуют в число 51?
def com2(n):
if n%10==9:
n+=10
return n
else:
n+=11
return n
def numProg(start,finish):
if start==finish:
return 1
if start>finish:
return 0
if start<finish:
return numProg(start+1,finish)+numProg(com2(start),finish)
print(numProg(25,51))
#Исполнитель U18 преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера:
#1. Вычесть 1
#2. Вычесть 3
#3. Разделить нацело на 3
#При выполнении команды 3 выполняется деление нацело (остаток отбрасывается).
#Программа для исполнителя U18 – это последовательность команд. Сколько существует таких программ,
#которые исходное число 22 преобразуют в число 2?
def numProg(start,finish):
if start==finish:
return 1
if start<finish:
return 0
if start>finish:
return numProg(start-1,finish)+numProg(start-3,finish)+numProg(start//3,finish)
print(numProg(22,2))
#Исполнитель U18 преобразует число, записанное на экране. У исполнителя есть три команды, которым присвоены номера:
#1. Вычесть 1
#2. Вычесть 3
#3. Взять остаток от деления на 4
#Команда 3 выполняется только для чисел, больших, чем 4.
#Программа для исполнителя U18 – это последовательность команд. Сколько существует таких программ,
#которые исходное число 22 преобразуют в число 2?
def com3(n):
if n>4:
n%=4
return n
else:
return 0
def numProg(start,finish):
if start==finish:
return 1
if start<finish:
return 0
if start>finish:
return numProg(start-1,finish)+numProg(start-3,finish)+numProg(com3(start),finish)
print(numProg(22,2))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment