Информатика | Илья Андрианов | itpy 🧑‍💻
1.03K subscribers
265 photos
21 videos
19 files
633 links
По рекламе: @ilandroxxy

Шпаргалки: clck.ru/3FwqWt
📚 Наши курсы: clck.ru/3FwqYb

Разборы: clck.ru/3Fwqay
💬 Чатик: clck.ru/3FwqZa

📺 YouTube: clck.ru/3FwqbX

🙋‍♂️ Я автор: @ilandroxxy
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 11240 #kege по информатике #ЕГЭ23

Полный разбор задачи в Notion

Задача 23 номера с сайта
kompege.ru автор: М. Ишимов
Интересная, но не очень сложная, рекомендую ознакомиться!

Код решения:

def F(a, b, flag):
if a >= b:
return a == b
if flag == "B":
return F(a + 2, b, "A") + F(a * 3, b, "C")
return F(a+2, b, "A") + F(a**2, b, "B") + F(a*3, b, "C")

print(F(2, 64, 0))


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
12655❤‍🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера #statgrad по информатике #ЕГЭ23
Автор: Статград
Уровень:
Средний

🚩 Условие задачи:
У исполнителя есть три команды, которые обозначены буквами:
A. Вычесть 1
B. Разделить на 2
С. Разделить на 3

Команда B может быть исполнена только для чётного числа, команда C –
только для числа, кратного 3.

Сколько существует программ, которые преобразуют исходное число 19
в число 1 и при этом траектория вычислений не содержит чисел 12 и 15?


👩‍💻 Код решения:
def F(a, b):
A, B, C = 0, 0, 0
if a <= b or a == 12 or a == 15:
return a == b
A = F(a - 1, b)
if a % 2 == 0:
B = F(a // 2, b)
if a % 3 == 0:
C = F(a // 3, b)
return A + B + C

print(F(19, 1))

# Ответ: 43


👩‍💻 Комментарии к коду:

1⃣ def F(a, b):
Определение функции с именем F, которая принимает два аргумента a и b.


2⃣ A, B, C = 0, 0, 0
Инициализация переменных A, B, C с начальным значением 0.


3⃣ if a <= b or a == 12 or a == 15:
Проверка условия: если a меньше или равно b, или a равно 12, или a равно 15, то выполнить следующий блок кода.


4⃣ return a == b
Возврат результата сравнения a и b (логическое значение True или False).


5⃣ A = F(a - 1, b)
Вызов функции F с аргументами a - 1 и b и присвоение результата переменной A.


6⃣ if a % 2 == 0:
Проверка условия: если a делится на 2 без остатка.


7⃣ B = F(a // 2, b)
Вызов функции F с аргументами a // 2 и b и присвоение результата переменной B.


8⃣ if a % 3 == 0:
Проверка условия: если a делится на 3 без остатка.


0⃣ C = F(a // 3, b)
Вызов функции F с аргументами a // 3 и b и присвоение результата переменной C.


1⃣0⃣ return A + B + C
Возврат суммы значений переменных A, B, C.


1⃣1⃣ print(F(19, 1))
Вызов функции F с аргументами 19 и 1 и вывод результата выполнения функции.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
632
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 11953 #kege по информатике #ЕГЭ23
Автор: PRO100 ЕГЭ
Уровень:
Средний

🚩 Условие задачи:
У исполнителя есть три команды:
A. Прибавить последнюю цифру
B. Добавить остаток от деления на 68
C. Возвести в квадрат

Если после выполнения команды получается такое же число, то команду нельзя применять к этому числу.

Сколько существует программ, для которых при исходном числе 2 результатом является число 680, при этом траектория вычислений содержит число 68 и не содержит числа 100?


👩‍💻 Код решения:
from functools import *
@lru_cache(None)
def F(a, b):
if a >= b or a == 100:
return a == b
R = []
if a % 10 != 0:
R.append(F(a + a % 10, b))
if a % 68 != 0:
R.append(F(a + a % 68, b))
R.append(F(a ** 2, b))
return sum(R)

print(F(2, 68) * F(68, 680))

# Ответ: 47997789947424


👩‍💻 Комментарии к коду:

1⃣ from functools import *
Импортируются все функции из модуля functools.


2⃣ @lru_cache(None)
Декоратор @lru_cache(None) используется для кеширования результатов вызовов функции F, чтобы избежать повторных вычислений для одних и тех же аргументов.


3⃣ def F(a, b):
Объявляется функция F с параметрами a и b.


4⃣ if a >= b or a == 100:
Проверяется условие: если a больше или равно b, или a равно 100, то функция возвращает True.


5⃣ R = []
Создается пустой список R, в который будут добавляться результаты вычислений.


6⃣ if a % 10 != 0:
Если остаток от деления a на 10 не равен 0.


7⃣ R.append(F(a + a % 10, b))
Добавляется результат вызова F с аргументом a + a % 10 и b.


8⃣ if a % 68 != 0:
Если остаток от деления a на 68 не равен 0.


0⃣ R.append(F(a + a % 68, b))
Добавляется результат вызова F с аргументом a + a % 68 и b.


1⃣0⃣ R.append(F(a ** 2, b))
Добавляется результат вызова F с аргументом a в квадрате и b.


1⃣1⃣ return sum(R)
Функция возвращает сумму всех элементов в списке.


1⃣2⃣. print(F(2, 68) * F(68, 680))
Выводится произведение результатов вызовов F с аргументами (2, 68) и (68, 680).


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
1175
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 6635 #kege по информатике #ЕГЭ23
Автор: Пробник ИМЦ СПб 2023
Уровень: Средний


🚩 Условие задачи:
У Троечки есть две команды:
1. Вычесть 3
2. Умножить на -3

Сколько различных отрицательных результатов можно получить из исходного числа 333 в ходе исполнения программы, содержащей ровно 13 команд?


🚩 Теоретическая справка:
Для решения этого номера необходимо создать глобальный список или множество, чтобы собрать все подходящие числа.


👩‍💻 Код решения:
my_set = set()

def F(a, k):
if k == 13:
my_set.add(a)
return 0
return F(a - 3, k+1) + F(a * -3, k+1)

F(333, 0)

print(len([x for x in my_set if x < 0]))

# Ответ: 2224


👩‍💻 Комментарии к коду:

1⃣ my_set = set()
Создается пустое множество my_set, которое будет использоваться для хранения уникальных значений.


2⃣ def F(a, k):
Объявляется функция F с двумя параметрами a и k.


3⃣ if k == 13:
Проверяется условие: если k равно 13, то текущее значение a добавляется в множество my_set, и функция возвращает 0.


4⃣ return F(a - 3, k+1) + F(a * -3, k+1)
Функция вызывает себя рекурсивно дважды, уменьшая a на 3 и умножая его на -3, а также увеличивая k на 1. Результаты обоих вызовов складываются и возвращаются.


5⃣ F(333, 0)
Вызывается функция F с аргументами 333 и 0, запуская процесс рекурсивного вычисления.


6⃣ print(len([x for x in my_set if x < 0]))
Выводится длина списка, содержащего элементы из my_set, которые меньше 0.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
543
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 13302 #kege по информатике #ЕГЭ23
Автор: М. Попков
Уровень: Сложный


🚩 Условие задачи:
У исполнителя есть две команды, которым присвоены номера:

1. Прибавить 1
2. Приписать справа двоичную запись остатка от деления на 5

Сколько существует программ, которые преобразуют исходное число 1_2 в число 101000101_2 ?


👩‍💻 Код решения:
def F(a, b):
if a >= b:
return a == b
return F(a+1, b) + F(int(f'{a:b}' + f'{(a % 5):b}', 2), b)

print(F(1, int('101000101', 2)))

# Ответ: 53669


👩‍💻 Комментарии к коду:

1⃣ def F(a, b):
Объявляется функция F с двумя параметрами a и b.


2⃣. if a >= b:
Проверяется условие: если a больше или равно b, то возвращается результат сравнения a == b.


3⃣ return F(a+1, b) + F(int(f'{a:b}' + f'{(a % 5):b}', 2), b)
Если a < b, функция вызывает себя рекурсивно два раза: с увеличенным на 1 значением a и с результатом вычисления значения, составленного из двоичного представления a и двоичного представления остатка от деления a на 5, преобразованных в число и переданных повторно в виде двоичной строки b.


4⃣ print(F(1, int('101000101', 2)))
Вызывается функция F с параметрами 1 и целым числом, полученным из двоичной строки '101000101'. Результат выводится на экран.


Поставь лайк, если разбор оказался полезным 🥰❤️‍🔥😘👾

#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
10862
2⃣3⃣ Шпаргалка ЕГЭ | Задание #ЕГЭ23 #шпора

📌 Ссылка на полную версию шпаргалки/методички на Notion, а здесь перечислим основные моменты:

Базовый шаблон решения задачи:
def F(a, b):
"""
Args:
a - начало
b - конец перебора
Returns:
сумму траекторий от a до b
"""

if a > b or a == 11 or a == 12:
return 0
elif a == b:
return 1
else:
return F(a + 1, b) + F(a * 2, b)

print(F(2, 10) * F(10, 40))


Не понимаю, почему никто (из студентов) не использует такой вариант шаблона, он короче и проще:
def F(a, b):
if a >= b or a == 11 or a == 12:
return a == b
return F(a + 1, b) + F(a * 2, b)

print(F(2, 10) * F(10, 40))


🚩if a >= b: return a==b
Если мы попали из начала в конец или превысили его, то вернем логическое тождество, которое возвращает True или False (1 и 0 для нашей суммы программ).


🚩 print(F(2, 10) * F(10, 40))
Гарантируем, что число 10 содержится в траектории


🚩 if a >= b or a == 11 or a == 12
Проверяем, что числа 11 и 12 не содержатся в траектории.


Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора: boosty 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
8542
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 5091 #polyakov по информатике #ЕГЭ23
Автор: А. Брейк
Уровень:
Сложный

🚩 Условие задачи:
1. Вычесть 1
2. Вычесть 2
3. Извлечь корень

Третья команда — извлекает из числа квадратный корень, если число является квадратом любого числа.

Сколько различных результатов можно получить из числа 113 в ходе программы, содержащей 17 команд?


🚩 Теоретическая справка:
Обратите внимание, что просят найти кол-во команд!


👩‍💻 Код решения:
from functools import *
my_set = set()

@lru_cache(None)
def F(x, c):
if c == 17:
my_set.add(x)
return 0
if x > 0:
if round(x**0.5) == x**0.5:
return F(x - 1, c + 1) + F(x - 2, c + 1) + F(x ** 0.5, c + 1)
return F(x-1, c+1) + F(x-2, c+1)


F(113, 0)
print(len(my_set))

# Ответ: 6537515


👩‍💻 Комментарии к коду:

1⃣ from functools import *
Импорт всех функций из модуля.


2⃣ my_set = set()
Создание пустого множества my_set, которое будет использоваться для хранения уникальных значений.


3⃣ @lru_cache(None)
Декоратор для кеширования результатов выполнения функции. None означает, что будет использоваться неограниченный кеш.


4⃣ def F(x, c):
Объявление функции F, которая принимает два аргумента: x и c.


5⃣ if c == 17:
Проверка условия: если c равно 17.


6⃣ my_set.add(x)
Добавление значения x в множество my_set.


7⃣ return 0
Конец выполнения функции для определенного значения c.


8⃣ if x > 0:
Проверка условия: если x больше нуля.


0⃣ if round(x**0.5) == x**0.5:
Проверка условия: если квадратный корень числа x является целым числом.


🔟 return F(x - 1, c + 1) + F(x - 2, c + 1) + F(x ** 0.5, c + 1)
Рекурсивный вызов функции с различными параметрами в зависимости от условий.


1⃣1⃣ return F(x-1, c+1) + F(x-2, c+1)
Рекурсивный вызов функции F с измененными параметрами.

1⃣2⃣ F(113, 0)
Вызов функции F с начальными значениями.


1⃣3⃣ print(len(my_set))
Вывод количества уникальных элементов в множестве.


Аудио мини-комментарий к коду решения оставлю в комментариях 👇👇👇

#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
9643
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 18289 #reshu по информатике #ЕГЭ23
Уровень: Средний


Задач из ОГЭ, 5 номер, но считаю её весьма полезной, так как это усложненная вариация 23 номера ЕГЭ.

🚩 Условие задачи:
1. раздели на 2
2.  вычти 1

Составьте алгоритм получения из чиcла 65 числа 4, содержащий не более 5 команд. В ответе запишите только номера команд.


🚩 Теоретическая справка:
Аудио с пояснением к коду решения оставлю в комментариях.


👩‍💻 Код решения:
def F(a, b, t):
if a < b or len(t) > 5:
return 0
elif a == b and len(t) <= 5:
print(t)
return 1
else:
return F(a / 2, b, t+'1') + F(a-1, b, t+'2')

F(65, 4, '')

# Ответ: 21111


👩‍💻 Комментарии к коду:

1⃣ def F(a, b, t):
Определение функции F с тремя параметрами a, b, и t.


2⃣ if a < b or len(t) > 5:
Проверка условия: если a меньше b или длина строки t превышает 5 символов.


3⃣ return 0
Возврат значения 0, если условие из пункта 2 истинно.


4⃣ elif a == b and len(t) <= 5:
Другое условие: если a равно b и длина строки t не превышает 5 символов.


5⃣ print(t)
Вывод текущего состояния строки t.


6⃣ return 1
Возврат значения 1, если условие из пункта 4 истинно.


7⃣ else:
В случае, если ни одно из вышеперечисленных условий не выполнено.


8⃣ return F(a / 2, b, t+'1') + F(a-1, b, t+'2')
Рекурсивный вызов функции F с различными значениями аргументов: для первого вызова a уменьшается вдвое и к строке t добавляется символ '1', для второго вызова a уменьшается на 1, к строке t добавляется символ '2'.


0⃣ F(65, 4, '')
Вызов функции F с начальными значениями a=65, b=4, и пустой строкой t.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Поддержать автора: boosty 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
854
🚩🚩 Разбор ДВ #2024 номера #23 по информатике #ЕГЭ23

🚩 Условие задачи:
Исполнитель преобразует число на экране.
У исполнителя есть две команды, которые обозначены латинскими буквами:
А. Вычти 2
В. Найди целую часть от деления на 2
Сколько существует программ, для которых при исходном число 30 результатом является число 1, и при этом траектория вычислений содержит число 14?



👩‍💻 Код решения:
def F(a, b):
if a <= b:
return a == b
return F(a-2, b) + F(a//2, b)

print(F(30, 14) * F(14, 1))

# Ответ: 36


👩‍💻 Комментарии к коду:

1. def F(a, b):
Объявление функции `F` с аргументами `a` и `b`.


2. if a <= b:
Проверка условия: если `a` меньше или равно `b`.


3. return a == b
Возвращение результата сравнения `a` и `b`, если они равны.


4. return F(a-2, b) + F(a//2, b)
Возвращение суммы рекурсивных вызовов функции `F` с аргументами `a-2, b` и `a//2, b`.


5. print(F(30, 14) * F(14, 1))
Вывод на экран произведения результатов вызовов функции `F` с аргументами `(30, 14)` и `(14, 1)`.



Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
643
🚩🚩 Разбор ДВ #2024 номера #23 по информатике #ЕГЭ23

👩‍💻 Код решения:
def F(a, b):
if a >= b:
return a == b
return F(a+1, b) + F(a+2, b) + F(a+3, b)

print(F(3, 7) * F(7, 35))


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
75
🚩🚩 Разбор ДВ #2024 номера #23 по информатике #ЕГЭ23

👩‍💻 Код решения:
def F(a, b):
if a >= b:
return a == b
return F(a+1, b) + F(a+2, b) + F(a+3, b)

print(F(3, 9) * F(9, 13))


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
854
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 13830 #kege по информатике #ЕГЭ23
Автор: Л. Шастин
Уровень: Средний


🚩 Условие задачи:
У исполнителя есть три команды, которым присвоены номера:
A. Прибавить 2
B. Прибавить 3
C. Умножить на 2

Сколько существует программ, для которых при исходном числе 3 результатом является число 20, а последняя в них команда - A или С?


🚩 Теоретическая справка:
В данной задачи для исследования порядка команд мы передаем строчный аргумент С, который принимает номера каждой новой команды. Таким образом мы можем проверить последнюю команду на условие.


👩‍💻 Код решения:
def F(a,b, c: str):
if a >= b:
return a == b and c[-1] != 'B'
return F(a + 2, b, c + 'A') + F(a + 3, b, c + 'B') + F(a*2, b, c + 'C')

print(F(3,20,''))

# Ответ: 60


👩‍💻 Комментарии к коду:

1️⃣
def F(a,b, c: str):
Объявление функции F с тремя параметрами: числовыми параметрами a, b и строковым параметром c


2️⃣
if a >= b:
Проверяем, если значение a больше или равно значению b


3️⃣
return a == b and c[-1] != 'B'
Возвращаем результат логического выражения, которое проверяет, что a равно b и последняя буква строки c не равна 'B'


4️⃣
return F(a + 2, b, c + 'A') + F(a + 3, b, c + 'B') + F(a*2, b, c + 'C')
В противном случае возвращаем сумму результатов рекурсивных вызовов функции F с измененными параметрами: добавляем к a значения 2, 3 и умножаем его на 2, а к строке c добавляем 'A', 'B' и 'C' соответственно


5️⃣
print(F(3,20,''))
Вызываем функцию F с начальными аргументами 3, 20 и пустой строкой, затем выводим результат вызова


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
954
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 13302 #kege по информатике #ЕГЭ23
Автор: М. Попков
Уровень: Сложный


🚩 Условие задачи:
У исполнителя есть две команды, которым присвоены номера:
1. Прибавить 1
2. Приписать справа двоичную запись остатка от деления на 5
Сколько существует программ, которые преобразуют исходное число 1_2 в число 101000101_2 ?


🚩 Теоретическая справка:
Конечно же сложность состоит в том, чтобы правильно понять задумку автора. Посмотрите какое классное решение получается!


👩‍💻 Код решения:
def F(a, b):
if a >= b:
return a == b
return F(a+1, b) + F(int(f'{a:b}' + f'{a % 5:b}', 2), b)

print(F(int('1', 2), int('101000101', 2)))

# Ответ: 53669


👩‍💻 Комментарии к коду:

1⃣ def F(a, b):
Определяем функцию F с двумя параметрами a и b, которые являются целыми числами.


2⃣ if a >= b:
Проверяем, если a больше или равно b. Это условие служит для завершения рекурсии.


3⃣ return a == b
Если a равно b, возвращаем True, иначе возвращаем False.


4⃣ return F(a+1, b) + F(int(f'{a:b}' + f'{a % 5:b}', 2), b)
Рекурсивно вызываем функцию F дважды с измененными параметрами и суммируем результаты.


5⃣ print(F(int('1', 2), int('101000101', 2)))
Выводим результат вызова функции F, передавая ей целочисленные значения, полученные из двоичных строк '1' и '101000101'.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Наша Stepik подборкой задач 😼
Please open Telegram to view this post
VIEW IN TELEGRAM
3843
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера из #statgrad по информатике #ЕГЭ23
Автор: Статград
Уровень: Сложный


🚩 Условие задачи:
Исполнитель преобразует число на экране. У исполнителя есть две команды:
A. Прибавь 1
B. Умножить на 2

Сколько существует программ, которые преобразуют исходное число 1 в число 17 и при этом траектория вычислений содержит не более 4 четных чисел?


🚩 Теоретическая справка:
На картинке я прикрепил два своих решения одной и той же задачи, но позже заметил, что, несмотря на то что оба варианта дают правильный ответ, один из них неверный! А именно первый вариант является неправильным, так как в нем рассматриваются все цифры, а не числа. Правильным подходом будет разбить все числа с помощью c+' '+str(a), чтобы таким образом рассматривать лишь четные числа. Будьте внимательны!


👩‍💻 Код решения:
def F(a, b, c):
if a >= b:
M = [int(x) for x in c.split() if int(x) % 2 == 0]
return a == b and len(M) <= 4
return F(a+1, b, c+' '+str(a)) + F(a*2, b, c+' '+str(a))


print(F(1, 17, ''))

# Ответ: 8


👩‍💻 Комментарии к коду:

1⃣ def F(a, b, c):
Объявление функции F с тремя параметрами: a, b и c.


2⃣ if a >= b:
Проверка, если значение a больше или равно b.


3⃣ M = [int(x) for x in c.split() if int(x) % 2 == 0]
Создание списка M, который содержит четные числа из строки c, преобразуя их в целые значения.


4⃣ return a == b and len(M) <= 4
Возвращение результата: True, если a равно b и количество четных чисел в M не превышает 4.


5⃣ return F(a+1, b, c+' '+str(a)) + F(a*2, b, c+' '+str(a))
Рекурсивный вызов функции F для двух случаев: увеличивая a на 1 и удваивая a, добавляя текущий a в строку c.


6⃣ print(F(1, 17, ''))
Вызов функции F с параметрами 1, 17 и пустой строкой, вывод результата на экран.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Второй канал про теорию Python📱
Please open Telegram to view this post
VIEW IN TELEGRAM
83🔥3
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 4333 #kege по информатике #ЕГЭ23
Автор: /dev/inf advanced
Уровень: Средний


🚩 Условие задачи:
Исполнитель преобразует число на экране.
У исполнителя есть три команды, которым присвоены номера:
1. Прибавить 1
2. Прибавить 3
3. Возвести в квадрат
Программа для исполнителя – это последовательность команд.
Известно, что исполнитель не может повторить команду, выполненную на предыдущем шаге. Например, если была выполнена команда 1, на следующем шаге могут быть выполнены только команды 2 или 3.
Сколько существует программ, для которых при исходном числе 1 результатом является число 25, и при этом траектория вычислений содержит число 5, но не содержит число 6?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы. Например, для программы 121 при исходном числе 7 траектория будет состоять из чисел 8, 11, 12.


🚩 Теоретическая справка:
Исполнитель не может повторить команду, выполненную на предыдущем шаге.


👩‍💻 Код решения:
def F(a, b, c):
if a >= b or a == 6:
return a == b
if c == '1':
return F(a + 3, b, '2') + F(a ** 2, b, '3')
if c == '2':
return F(a + 1, b, '1') + F(a ** 2, b, '3')
if c == '3':
return F(a + 1, b, '1') + F(a + 3, b, '2')
return F(a + 1, b, '1') + F(a + 3, b, '2') + F(a ** 2, b, '3')


print(F(1, 5, '') * F(5, 25, ''))

Ответ: 10


👩‍💻 Комментарии к коду:

1⃣ def F(a, b, c):
Создается функция F, которая принимает три аргумента.


2⃣ if a >= b or a == 6:
Если текущее значение a больше или равно значению b, или a равно 6.


3⃣ return a == b
Если условие из предыдущей строки выполняется, функция возвращает True, и False в противном случае.


4⃣ if c == '1':
Проверяется, равно ли значение c строке '1'.


5⃣ return F(a + 3, b, '2') + F(a 2, b, '3')
Если c == '1', функция вызывает саму себя дважды.


6⃣ if c == '2':
Проверяется, равно ли значение c строке '2'.


7⃣ return F(a + 1, b, '1') + F(a 2, b, '3')
Если c == '2', функция вызывает саму себя дважды.


8⃣ if c == '3':
Проверяется, равно ли значение c строке '3'.


0⃣ return F(a + 1, b, '1') + F(a + 3, b, '2')
Если c == '3', функция вызывает саму себя дважды.


🔟 return F(a + 1, b, '1') + F(a + 3, b, '2') + F(a 2, b, '3')
Если значение c не равно '1', '2' или '3' (например, пустая строка `''`), функция вызывает саму себя трижды.


1⃣1⃣ print(F(1, 5, '') * F(5, 25, ''))
Результаты этих вызовов перемножаются, и итоговое значение выводится на экран.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Поддержать автора донатом 💵💵
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥107🔥5
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 11953 #kege по информатике #ЕГЭ23
Автор: PRO100 ЕГЭ
Уровень: Средний


🚩 Условие задачи:
Исполнитель преобразует число на экране. У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Прибавить последнюю цифру
B. Добавить остаток от деления на 68
C. Возвести в квадрат
Программа для исполнителя – это последовательность команд.
Команда А прибавляет к числу его последнюю цифру. Например, из числа 68 получится число 76.
Команда B прибавляет к числу его остаток от деления на 68. Например, из числа 10 получится число 20.
Команда C возводит число в квадрат. Например, из числа 9 получится число 81.
Если после выполнения команды получается такое же число, то команду нельзя применять к этому числу. Например, к числу 10 нельзя применить команду A, так как 10 + 0 = 10.
Сколько существует программ, для которых при исходном числе 2 результатом является число 680, при этом траектория вычислений содержит число 68 и не содержит числа 100?
Траектория вычислений программы – это последовательность результатов выполнения всех команд программы.


🚩 Теоретическая справка:
Если после выполнения команды получается такое же число, то команду нельзя применять к этому числу. Например, к числу 10 нельзя применить команду A, так как 10 + 0 = 10.


👩‍💻 Код решения:
from functools import lru_cache

@lru_cache(None)

def F(a, b):
if a >= b or a == 100:
return a == b
count = 0
x = a % 10
if x != 0:
count += F(a + x, b)
x = a % 68
if x != 0:
count += F(a + x, b)
x = a ** 2
if x != a:
count += F(x, b)
return count
print(F(2, 68) * F(68, 680))

Ответ: 47997789947424


👩‍💻 Комментарии к коду:

1⃣ from functools import lru_cache
Импортируется декоратор lru_cache из модуля functools.


2⃣ @lru_cache(None)
Декоратор lru_cache применяется к функции . Параметр None означает, что кэш не имеет ограничений по размеру.


3⃣ def F(a, b):
Определяется функция F, которая принимает два аргумента.


4⃣ if a >= b or a == 100:
Если текущее значение a больше или равно значению b, или a равно 100.


5⃣ return a == b
Если условие из предыдущей строки выполняется, функция возвращает True, и False в противном случае.


6⃣ count = 0
Создаем счетчик.


7⃣ x = a % 10
Вычисляется последняя цифра числа a.


8⃣ if x != 0:
Проверяется, не равна ли последняя цифра числа a нулю.


0⃣ count += F(a + x, b)
Если последняя цифра числа a не равна нулю, функция вызывает саму себя с аргументами (a + x, b) и результат этого вызова добавляется к переменной count.


🔟 x = a % 68
Вычисляется остаток от деления числа a на 68.


1⃣1⃣ if x != 0:
Проверяется, не равен ли остаток от деления числа a на 68 нулю.


1⃣2⃣ count += F(a + x, b)
Если остаток от деления числа a на 68 не равен нулю, функция вызывает саму себя с аргументами (a + x, b) и результат этого вызова добавляется к переменной count.


1⃣3⃣ x = a** 2
Вычисляется квадрат числа a.


1⃣4⃣ if x != a:
Проверяется, не равен ли квадрат числа a самому числу a.


1⃣5⃣ count += F(x, b)
Если квадрат числа a не равен самому числу a, функция вызывает саму себя с аргументами (x, b) и результат этого вызова добавляется к переменной count.


1⃣6⃣ return count
Возвращается значение переменной count.


1⃣7⃣ print(F(2, 68) * F(68, 680))
Результаты этих вызовов перемножаются, и итоговое значение выводится на экран.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥1286
🚩🚩 Разбор номера 19712 #КЕГЭ по информатике #ЕГЭ23
Автор: М.Попков
Уровень: Средний


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

А. Вычесть 2
В. Если число четное, Разделить на 2, Иначе Вычесть 7

Сколько существует программ, для которых при исходном числе 40 результатом является число 1 и при этом никакая команда не повторяется более двух раз подряд?


🚩 Теоретическая справка:
Аудио с пояснением к коду решения оставлю в комментариях.


👩‍💻 Код решения:
def F(a, b, s):
if a <= b:
return a == b and 'AAA' not in s and 'BBB' not in s
h = [F(a-2, b, s+'A')]
if a % 2 == 0:
h += [F(a/2, b, s+'B')]
else:
h += [F(a-7, b, s+'B')]
return sum(h)

print(F(40, 1, ''))

Ответ: 16


👩‍💻 Комментарии к коду:

1⃣ def F(a, b, s):
Объявление функции F с тремя параметрами: a (начальное число), b (целевое число), s (строка с последовательностью действий).


2⃣ if a <= b:
Проверка, если текущее число a меньше или равно целевому числу b.


3⃣ return a == b and 'AAA' not in s and 'BBB' not in s
Возвращает True только если a равно b и в строке s нет подстрок 'AAA' и 'BBB', иначе False.


4⃣ h = [F(a-2, b, s+'A')]
Создает список h с результатом рекурсивного вызова функции, где a уменьшается на 2, а к строке s добавляется 'A'.


5⃣ if a % 2 == 0:
Проверяет, четное ли число a.


6⃣ h += [F(a/2, b, s+'B')]
Если a четное, добавляет в список h результат рекурсивного вызова функции, где a делится на 2, а к строке s добавляется 'B'.


7⃣ else:
Если a нечетное.


8⃣ h += [F(a-7, b, s+'B')]
Добавляет в список h результат рекурсивного вызова функции, где a уменьшается на 7, а к строке s добавляется 'B'.


0⃣ return sum(h)
Возвращает сумму элементов списка h (в данном случае True и False интерпретируются как 1 и 0).


🔟 print(F(40, 1, ''))
Вызов функции с начальными значениями a = 40, b = 1, s = '' и вывод результата.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥75🔥3
🚩🚩 Разбор номера 18450 #kege по информатике #ЕГЭ23
Автор: Сергей Горбачев
Уровень: Средний

🚩 Условие задачи:
У исполнителя есть три команды, которые обозначены цифрами:

1. Прибавить 3
2. Прибавить 4
3. Умножить на 2

Сколько существует программ, для которых при исходном числе 11 результатом будет являться отрезок [50;54], при этом траектория вычислений не содержит числа 23?


👩‍💻 Код решения:
def F(a, b: list):
if a >= min(b) or a == 23:
return a in b
return F(a + 3, b) + F(a + 4, b) + F(a * 2, b)


print(F(11, [50, 51, 52, 53, 54]))

Ответ: 3254


👩‍💻 Комментарии к коду:

1⃣def F(a, b: list):
• Объявление функции F с двумя параметрами: a (число) и b (список чисел).


2⃣if a >= min(b) or a == 23:
• Условие: если a больше или равен минимальному элементу списка b ИЛИ a равен 23.


3⃣ return a in b
• Если условие выше выполняется, возвращается True/False (проверка, есть ли a в списке b).


4⃣ return F(a + 3, b) + F(a + 4, b) + F(a * 2, b)
• Если условие не выполняется, функция вызывает саму себя рекурсивно с тремя разными значениями a:
• Результаты этих вызовов суммируются.


5⃣ print(F(11, [50, 51, 52, 53, 54]))
Вызов функции с аргументами a = 11 и b = [50, 51, 52, 53, 54], затем вывод результата.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥44🔥4