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

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

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

📺 YouTube: clck.ru/3FwqbX

🙋‍♂️ Я автор: @ilandroxxy
Download Telegram
✔️ Друзья!
До экзамена осталось менее двух месяцев – самое время объективно оценить свои знания!


В ближайшие выходные (19-20 числа) мои студенты будут писать пробник, и я с удовольствием делюсь этим вариантом с вами, уважаемые подписчики. Это полноценный вариант с необходимыми файлами – рекомендую проходить его без конспектов, чтобы результат был максимально честным и полезным.

Что предлагаю:

С вас решение пробника, с меня результат в виде разбаловки – бесплатно.

Краткий анализ ваших решений – 500 ₽.
Вы присылаете выполненный пробник в виде архива (будет подробная инструкция), а я делаю короткий обзор с комментариями.

Персональный разбор – 2000 ₽ (60 минут).
То есть полноценное онлайн занятие с детальным анализом, ответами на вопросы и рекомендациями по дальнейшей подготовке.

Если хотите присоединиться – пишите: @ilandroxxy, все материалы и инструкции вышлю в ЛС. Это отличная возможность понять, на каком вы уровне, и как усилить подготовку в оставшееся время.

Информатика ЕГЭ | itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥73🔥3👨‍💻2
This media is not supported in your browser
VIEW IN TELEGRAM
10🔥4❤‍🔥3
🧑‍💻 "Да ладно, я потом попробую списать эту информатику, пронесет!" — Слышит каждый родитель подростка, кто сдает ЕГЭ и ОГЭ ‼️

А вот не пронесет…

Хватит переживать из-за поступления на бюджет! Познакомьтесь с Ульяной Балашовой!

Она не просто репетитор — а самый настоящий «переводчик» с цифрового на подростковый.

🔥 Почему к ней записываются даже самые "безнадежные" случаи?
Объясняет на крутых примерах — от компьютерных игр до кода Apple!
Гарантия прогресса — уже через пару занятий виден результат!
Готовит к ОГЭ/ЕГЭ — проверенная методика для высоких баллов!
А так же есть потрясающие летние интенсивы!

Подписывайтесь на канал Ульяны и двери на бюджет в Университет распахнутся сами собой!

Ссылка тут 👉 https://t.me/+2CPoHD8EKCo4N2Ey
6❤‍🔥3🔥3😁2
📱 Разбор регулярных выражений в Python на примере заданий из ЕГЭ по информатике #tpy

Регулярные выражения — мощный инструмент для поиска и анализа текстовых данных. В заданиях ЕГЭ по информатике (задание 24) они часто используются для поиска числовых последовательностей по определённому шаблону. Разберём основные приёмы на примерах из реальных задач.

Общая структура большинство решений строится по следующему шаблону:
from re import *

s = open('24.txt').readline()
# num — шаблон отдельного числа
# reg — шаблон всей последовательности
reg = rf'{num}([+*]{num})*'
matches = [x.group() for x in finditer(reg, s)]
maxi = max(len(x) for x in matches)
print(maxi)


Пример 1: Поиск последовательностей чисел от 7, 8, 9, 0 (№ 20813 #kege)
num = r'([789][0789]*|[0])'
reg = rf'{num}([-*]{num})*'

🔣num — число, начинающееся с 7, 8 или 9 и продолжающееся цифрами 0, 7, 8, 9, либо одиночный ноль.
🔣reg — последовательность таких чисел, разделённых символами - или *.


Пример 2: Работа с буквами и диапазоном 1–6 (№ 18619 #kege)
s = s.replace('A', ' ').replace('C', ' ').replace('D', ' ')
num1 = r'[B]([1-6][1-6]*)'
num2 = r'([1-6][1-6]*)'
reg = rf'{num1}([-*]{num2})*'

🔣Заменяются лишние символы на пробелы.
🔣Затем ищутся последовательности, начинающиеся с B, за которой идут цифры от 1 до 6, и операторы - или *.


Пример 3: Подсчёт количества чисел (№ 18285 #kege)
num = r'([1-9][0-9]*)'
reg = rf'{num}([+*]{num})*'

🔣Сначала находятся выражения вида a+b+c.
🔣Затем + и * заменяются на пробелы, и с помощью split() считается количество чисел в выражении.

Пример 4: Сумма выражений (№ 18147 #kege)
num = r'([789]+)'
reg = rf'{num}([+]{num})+'

🔣Ищутся выражения с числами из цифр 7, 8 и 9, соединённые знаком +.
🔣Затем по условию задания с помощью функции eval() находится максимальное значение такого выражения.


🚩 Общие шаблоны для задач ЕГЭ

Определение чисел:
r'([1-9][0-9]*)' - натуральные числа (без ведущих нулей)

r'([0-9]+)' - любые целые числа

r'([789][0789]*)' - числа, начинающиеся с 7,8 или 9


Операции между числами:
([+*]{num})* - повторяющиеся операции + или *

([-+*]{num})* - операции -, + или *


Специальные условия:
Окончание на определенные цифры: [05]

Начало с определенных букв: [AFD]


Регулярные выражения - это мощный инструмент, который требует практики. Разбирая подобные задачи, вы лучше поймете их синтаксис и возможности.

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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Второй канал про теорию Python 📱
Please open Telegram to view this post
VIEW IN TELEGRAM
47🔥3👍2
🚩🚩 Разбор номера 21422 #kege по информатике #ЕГЭ25
Автор: Досрочная волна 2025
Уровень:
Базовый

🚩 Условие задачи:
Напишите программу, которая перебирает целые числа, бóльшие 1 125 000, в порядке возрастания и ищет среди них такие, у которых
есть натуральный делитель, оканчивающийся на цифру 7 и не равный ни самому числу, ни числу 7. В ответе запишите в первой строке таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – наименьший делитель для каждого из них, оканчивающийся цифрой 7, не равный ни самому числу, ни числу 7.


🚩 Теоретическая справка:
Относительно базовая задача 25 номера, но надо добавить этот разбор на канал для объективности, так как примеры ФИПИшных задач в списке разборов отсутствуют..


👩‍💻 Код решения:
def divisors(x):
div = []
for j in range(1, int(x**0.5)+1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))


cnt = 0
for x in range(1_125_000+1, 10**10):
div = [j for j in divisors(x) if j != x and j % 10 == 7 and j != 7]
if len(div) > 0:
print(x, min(div))
cnt += 1
if cnt == 5:
break

Ответ:
1125003 467
1125006 97
1125009 17
1125011 3187
1125012 177

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

1⃣ def divisors(x):
Определение функции divisors, которая находит все делители числа x.


2⃣ div = []
Создание пустого списка для хранения делителей числа x.


3⃣ for j in range(1, int(x*0.5)+1):
Цикл от 1 до квадратного корня из x (оптимизация для поиска делителей).


4⃣ if x % j == 0:
Проверка, является ли j делителем x (если остаток от деления равен 0).


5⃣ div += [j, x // j]
Добавление в список делителей как j, так и x/j (парный делитель).


6⃣ return sorted(set(div))
Возврат отсортированного списка уникальных делителей (set удаляет дубликаты).


7⃣ cnt = 0
Инициализация счетчика найденных чисел.


8⃣ for x in range(1_125_000+1, 10*10):
Цикл по числам от 1_125_001 до 10**10.


0⃣ div = [j for j in divisors(x) if j != x and j % 10 == 7 and j != 7]
Создание списка делителей числа x, которые не равны самому x, оканчиваются на 7 и не равны 7.


1⃣0⃣ if len(div) > 0:
Проверка, есть ли подходящие делители в списке.


1⃣1⃣ print(x, min(div))
Вывод числа x и его минимального подходящего делителя.


1⃣2⃣ cnt += 1
Увеличение счетчика найденных чисел.


1⃣3⃣ if cnt == 5:
Проверка, найдено ли уже 5 чисел.


1⃣4⃣ break
Прерывание цикла, если найдено 5 чисел.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥2
🔍 Функции all() и any() в Python: просто о полезном #tpy

В задачах ЕГЭ (например, в номере 25) часто нужно проверять условия для всех или хотя бы одного элемента из набора. Python предлагает элегантные решения — встроенные функции all() и any().


🚩 Пример с all() — Проверка простого числа
def is_prime(x):
if x <= 1:
return False
return all(x % i != 0 for i in range(2, x))

print(is_prime(7)) # Вывод: True


📌 Объяснение:

🔣Генераторное выражение (x % i != 0 for i in range(2, x)) создает последовательность логических значений: True, если x не делится на i, и False, если делится.

🔣Функция all() возвращает True, только если все значения в последовательности — истинны.

🔣В результате, is_prime(7) вернет True, так как 7 не делится ни на одно число от 2 до 6 — то есть, это простое число.


🚩 Пример с any() — Поиск хотя бы одного делителя
def has_divisor(x):
return any(x % i == 0 for i in range(2, x))

print(has_divisor(9)) # Вывод: True


📌 Объяснение:

🔣Генератор проверяет, делится ли x хотя бы на одно число в диапазоне.

🔣any() вернет True, если хотя бы одно значение в последовательности — истина.

🔣В примере has_divisor(9) возвращает True, потому что 9 делится на 3.



💡 Кратко:

🔣all() — возвращает True, если все элементы истинны.

🔣any() — возвращает True, если хотя бы один элемент истинен.

🔣Обе функции работают с итерируемыми объектами (списки, генераторы и т. д.) и часто используются в проверках условий.

#⃣ Вся теория для ЕГЭ в одном месте

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


🚩 Условие задачи:
Определите наибольший номер строки таблицы, для чисел которой выполнены оба условия:
– числа в строке расположены в порядке неубывания;
– в строке есть повторяющиеся числа с чётной суммой цифр.


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


👩‍💻 Код решения:
R = []
for n, s in enumerate(open('9.csv'), 1):
M = [int(x) for x in s.split(';')]
if M == sorted(M):
if any(M.count(x) > 1 and sum(map(int, str(x))) % 2 == 0 for x in M):
R.append(n)
print(max(R))

Ответ: 6937

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

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


2⃣ for n, s in enumerate(open('9.csv'), 1):
- Начинаем цикл по каждой строке файла 9.csv, считывая одновременно её содержание s и устанавливая номер строки n, начиная с 1.


3⃣ M = [int(x) for x in s.split(';')]
- Преобразуем строку s, разделённую по символу ;, в список целых чисел M.


4⃣ if M == sorted(M):
- Проверяем, является ли список M отсортированным по возрастанию.


5⃣ if any(M.count(x) > 1 and sum(map(int, str(x))) % 2 == 0 for x in M):
- Проверяем, есть ли в списке M повторяющиеся элементы x, сумма цифр которых чётная.


6⃣ R.append(n)
- Добавляем номер строки n в список R, если выполняются условия выше.


7⃣ print(max(R))
- Выводим максимальный номер строки из списка R, соответствующий требуемым условиям.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥7333👍1
🚩 Разбор номера #yandex по информатике #ЕГЭ9
Автор: Рогов.А
Уровень:
Сложный

🚩 Условие задачи:
В файле электронной таблицы в каждой строке содержатся шесть натуральных чисел. Определите количество строк таблицы, для которых выполнены оба условия:

в строке хотя бы одно число повторяется дважды (ровно 2 раза);
каждое из повторяющихся дважды (ровно 2 раза) чисел превышает каждое неповторяющееся.


🚩 Теоретическая справка:
Опасная задача потому что автор учитывает ситуацию, когда список uncopied пустой, что может вызывать ошибку при использовании функции max().


👩‍💻 Код решения:
cnt = 0
for s in open('0. files/9.csv'):
M = sorted([int(x) for x in s.split(',')])
copied = [x for x in M if M.count(x) == 2]
uncopied = [x for x in M if M.count(x) == 1]
if len(copied) > 0:
if len(uncopied) == 0:
maxi = 0
else:
maxi = max(uncopied)
if min(copied) > maxi:
cnt += 1
print(cnt)

Ответ: 665


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

1⃣ cnt = 0
- Создаём переменную-счётчик cnt и инициализируем её нулём.
- Будет хранить количество строк, удовлетворяющих условию.


2⃣ for s in open('0. files/9.csv'):
- Открываем файл '0. files/9.csv' для чтения.
- Циклом for перебираем каждую строку s из файла.


3⃣ M = sorted([int(x) for x in s.split(',')])
- Разбиваем строку s по запятым с помощью s.split(',').
- Каждый элемент преобразуем в целое число int(x).
- Полученный список чисел сортируем по возрастанию sorted().
- Результат сохраняем в переменную M.


4⃣ copied = [x for x in M if M.count(x) == 2]
- Создаём список copied с помощью генератора списка.
- Включаем в него элементы x из M, которые встречаются ровно 2 раза (M.count(x) == 2).
- Это будут числа-дубликаты в текущей строке.


5⃣ uncopied = [x for x in M if M.count(x) == 1]
- Аналогично создаём список uncopied.
- Включаем элементы, которые встречаются только 1 раз (M.count(x) == 1).
- Это уникальные числа в текущей строке.


6⃣ if len(copied) > 0:
- Проверяем, есть ли в строке дубликаты (длина списка copied больше 0).
- Если нет, то пропускаем дальнейшие проверки для этой строки.


7⃣ if len(uncopied) == 0:
- Проверяем, есть ли в строке уникальные числа.
- Если уникальных чисел нет (uncopied пуст):


8⃣ maxi = 0
- Устанавливаем maxi (максимальное уникальное число) в 0,
- так как сравнивать будем с минимальным дубликатом.


0⃣ else:
- Если в строке есть уникальные числа:


🔟 maxi = max(uncopied)
- Находим максимальное число среди уникальных и сохраняем в maxi.


1⃣1⃣ if min(copied) > maxi:
- Проверяем условие: минимальное число из дубликатов больше maxi.
- Если условие выполняется:


1⃣2⃣ cnt += 1
- Увеличиваем счётчик подходящих строк на 1.


1⃣3⃣ print(cnt)
- После обработки всех строк выводим итоговое значение счётчика cnt.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥7❤‍🔥442
This media is not supported in your browser
VIEW IN TELEGRAM
❤‍🔥6🔥33👨‍💻22
📱 Можно ли использовать else после for или while в Python? #tpy

Ответ: Да, можно! И это — вполне валидная и полезная конструкция.

📌 Как это работает?
В Python блок else после цикла for или while выполняется только в том случае, если цикл завершился нормально, то есть без использования break.


#⃣ Вся теория для ЕГЭ в одном месте

Программирование на Python | itpy 💻
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤‍🔥10👍4🔥32
🚩 Строковые константы модуля string в Python #tpy

При работе со строками часто возникает задача: определить, к какой категории символов относится тот или иной символ — цифра ли это, буква, знак пунктуации и т.д.

Помимо методов isdigit(), isalpha(), использования Unicode (ord()) и регулярных выражений, Python предлагает более удобный способ — строковые константы встроенного модуля string.


📚 Примеры полезных констант:
import string

print(string.digits)
# Цифры: 0123456789

print(string.ascii_letters)
# Все английские буквы: abc...XYZ

print(string.ascii_lowercase)
# Только строчные: abc...

print(string.ascii_uppercase)
# Только заглавные: ABC...

print(string.punctuation)
# Знаки препинания: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~


📌 Эти готовые строки особенно полезны, когда:
🔣Нужно фильтровать или валидировать ввод
🔣Писать генераторы случайных паролей
🔣Проверять состав строки без использования регулярных выражений



🔎 Пример использования — фильтрация букв:
s = "Hello123!"
letters_only = [ch for ch in s if ch in string.ascii_letters]
print(letters_only) # ['H', 'e', 'l', 'l', 'o']

Кроме вышеупомянутых, модуль string содержит и другие полезные объекты, включая string.whitespace, string.printable и даже шаблонные классы для форматирования.

🔗 Подробнее в официальной документации:
docs.python.org/3/library/string.html

#⃣ Вся теория для ЕГЭ в одном месте

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


🚩 Условие задачи:
Откройте файл электронной таблицы, содержащей в каждой строке шесть натуральных чисел. Определите количество строк таблицы, содержащих числа, для которых выполнены оба условия:

в строке только одно число повторяется трижды, остальные числа различны;
утроенный квадрат повторяющегося числа строки больше суммы квадратов её неповторяющихся чисел.


👩‍💻 Код решения:
cnt = 0
for s in open('0. files/9.csv'):
M = [int(x) for x in s.split(';')]
copied = [x for x in M if M.count(x) == 3]
uncopied = [x for x in M if M.count(x) == 1]
if len(copied) == 3 and len(uncopied) == 3:
if (copied[0] ** 2) * 3 > (sum([x**2 for x in uncopied])):
cnt += 1
print(cnt)

Ответ: 245


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

1⃣ cnt = 0
# Инициализируем счетчик, который будет подсчитывать количество строк с нужными условиями


2⃣ for s in open('0. files/9.csv'):
# Открываем файл и построчно считываем его содержимое в переменную s


3⃣ M = [int(x) for x in s.split(';')]
# Разделяем строку по символу ';', преобразуем элементы в целые числа и создаем список M


4⃣ copied = [x for x in M if M.count(x) == 3]
# Создаем список copied из элементов, которые встречаются в M ровно 3 раза (повторяющиеся элементы)


5⃣ uncopied = [x for x in M if M.count(x) == 1]
# Создаем список uncopied из элементов, которые встречаются в M ровно 1 раз (уникальные элементы)


6⃣ if len(copied) == 3 and len(uncopied) == 3:
# Проверяем, что у нас ровно 3 повторяющихся элемента и 3 уникальных элемента


7⃣ if (copied[0] ** 2) * 3 > (sum([x**2 for x in uncopied])):
# Проверяем условие: квадрат первого повторяющегося элемента, умноженный на 3, больше суммы квадратов всех уникальных элементов


8⃣ cnt += 1
# Если оба условия выполняются, увеличиваем счетчик на 1


0⃣ print(cnt)
# Выводим итоговое значение счетчика


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥3👍2
🚩 Разбор номера 19888 #kege по информатике #ЕГЭ5
Автор: Л.Шастин
Уровень: Средний

🚩 Условие задачи:
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится восьмеричная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N чётное, то в этой записи все нечётные цифры меняются на «2»;
б) если число N нечётное, то первая и последняя цифры меняются на «3».
Полученная таким образом запись является восьмеричной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.

Например, для исходного числа 9 = 118 результатом является число 338 = 27, а для исходного числа 12 = 148 это число 248 = 20.
Укажите максимальное число R, меньшее 300, которое может быть получено с помощью описанного алгоритма. В ответе запишите это число в десятичной системе счисления.


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


👩‍💻 Код решения:
R = []
for n in range(1, 1000):
s = f'{n:o}'
if n % 2 == 0:
for x in '1357':
s = s.replace(x, '2')
else:
s = '3' + s[1:-1] + '3'
r = int(s, 8)
if r < 300:
R.append(r)
print(max(R))

Ответ: 294:


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

1⃣ R = []
Создается пустой список R для хранения подходящих результатов.


2⃣ for n in range(1, 1000):
Цикл перебирает числа от 1 до 999 включительно.


3⃣ s = f'{n:o}'
Число n преобразуется в восьмеричную (octal) систему счисления и сохраняется в строку s.


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


5⃣ for x in '1357':
Если число четное, то перебираются нечетные цифры 1, 3, 5, 7.


6⃣ s = s.replace(x, '2')
Каждую нечетную цифру в строке s заменяют на 2.


7⃣ else:
Если число n нечетное, выполняется этот блок.


8⃣ s = '3' + s[1:-1] + '3'
Для нечетных чисел:
- Первый символ строки s заменяется на '3'.
- Последний символ заменяется на '3'.
- Середина строки (s[1:-1]) остается без изменений.
Пример: s = '1234' → '323' (первая и последняя цифры заменены на 3).


0⃣ r = int(s, 8)
Строка s (в восьмеричной системе) преобразуется обратно в десятичное число.


🔟 if r < 300:
Если полученное число r меньше 300, оно добавляется в список R.


1⃣1⃣ print(max(R))
В конце выводится максимальное число из списка R.


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

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


🚩 Условие задачи:
Полина составляет слова, переставляя буквы в слове ПАЙТОН. Сколько слов может составить Полина, если известно, что сумма порядковых номеров гласных букв, в каждом из них, равна 6? Буквы нумеруются слева направо, начиная с единицы.


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


👩‍💻 Код решения:
from itertools import *
cnt = 0
for p in permutations('ПАЙТОН'):
word = ''.join(p)
summa = word.index('А')+1 + word.index('О')+1
if summa == 6:
cnt += 1
print(cnt)

Ответ: 96


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

1⃣from itertools import *
Импортируется модуль itertools для работы с перестановками (permutations).


2⃣ cnt = 0
Создается счетчик cnt, который будет считать количество подходящих перестановок.


3⃣ for p in permutations('ПАЙТОН'):
Цикл перебирает все возможные перестановки букв в слове 'ПАЙТОН'.


4⃣ word = ''.join(p)
Каждая перестановка p (это кортеж букв) объединяется в строку word.


5⃣ summa = word.index('А')+1 + word.index('О')+1
- word.index('А') возвращает индекс буквы 'А' в строке (начиная с 0).
- +1 добавляется, чтобы считать позицию с 1 (как в обычном порядке).
- Аналогично для буквы 'О'.
- summa — это сумма позиций букв 'А' и 'О' в текущей перестановке.


6⃣ if summa == 6:
Проверяется, равна ли сумма позиций 'А' и 'О' 6.


7⃣ cnt += 1
Если условие выполнено (summa == 6), счетчик увеличивается на 1.


8⃣ print(cnt)
В конце выводится общее количество подходящих перестановок.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥9👍4🔥4
🚩🚩 Разбор номера 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
🚩🚩🚩🚩🚩 Разбор номера 8710 #kege по информатике #ЕГЭ19 #ЕГЭ20 #ЕГЭ21
Автор: М.Шагитов
Уровень:
Средний

🚩 Условие задачи:
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из кучи один камень, либо, если в куче 4 или больше камней, он может убрать четыре камня, либо, если количество камней в куче кратно трем, он может уменьшить количество камней в куче в три раза.

Игра завершается в тот момент, когда количество камней в куче становится не более 1.

Победителем считается игрок, сделавший последний ход, т.е. первым получивший кучу из 1 камня или меньше.

В начальный момент в куче было S камней; 4 ≤ S ≤ 100.

Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника.

Укажите минимальное значение S, при котором Петя не может выиграть за один ход, но при любом ходе Пети Ваня может выиграть своим первым ходом.

Задание 20.
Для игры, описанной в задании 19, найдите два наименьших значения S, при которых у Пети есть выигрышная стратегия, причём одновременно выполняются два условия:

− Петя не может выиграть за один ход;

− Петя может выиграть своим вторым ходом независимо от того, как будет ходить Ваня.

Найденные значения запишите в ответе в порядке возрастания.


Задание 21.
Для игры, описанной в задании 19, найдите минимальное значение S, при котором одновременно выполняются два условия:

– у Вани есть выигрышная стратегия, позволяющая ему выиграть первым или вторым ходом при любой игре Пети;

– у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом.


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


👩‍💻 Код решения:
def F(s, n):
if s <= 1:
return n % 2 == 0
if n == 0:
return 0
h = [F(s - 1, n - 1)]
if s >= 4:
h += [F(s - 4, n - 1)]
if s % 3 == 0:
h += [F(s / 3, n - 1)]
return any(h) if (n - 1) % 2 == 0 else all(h)

print([s for s in range(4, 100 + 1) if F(s, 2)])
print([s for s in range(4, 100 + 1) if F(s, 3) and not F(s, 1)])
print([s for s in range(4, 100 + 1) if F(s, 4) and not F(s, 2)])

Ответы:
6
7 10
8



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

1⃣ def F(s, n):
• Объявление функции F с параметрами s (текущее состояние) и n (количество оставшихся ходов)


2⃣ if s <= 1:
• Проверка, если s меньше или равно 1, игра завершена


3⃣ return n % 2 == 0
• Возвращает True, если n чётное (победа текущего игрока), иначе False


4⃣ if n == 0:
• Проверка, если ходы закончились (n = 0), игра проиграна


5⃣ return 0
• Возвращает 0 (ложь), так как нет ходов для победы


6⃣ h = [F(s - 1, n - 1)]
• Рекурсивный вызов F для хода s - 1 и уменьшенного n, результат добавляется в список h


7⃣ if s >= 4:
• Проверка, можно ли сделать ход s - 4


8⃣ h += [F(s - 4, n - 1)]
• Если s >= 4, рекурсивный вызов F для s - 4 и уменьшенного n, результат добавляется в h


0⃣ if s % 3 == 0:
• Проверка, делится ли s на 3


🔟 h += [F(s / 3, n - 1)]
• Если s делится на 3, рекурсивный вызов F для s / 3 и уменьшенного n, результат добавляется в h


1⃣1⃣ return any(h) if (n - 1) % 2 == 0 else all(h)
• Если предыдущий ход был чётным ((n - 1) % 2 == 0), возвращает any(h) (хотя бы один выигрышный ход), иначе all(h) (все ходы должны быть выигрышными)


1⃣2⃣ print([s for s in range(4, 100 + 1) if F(s, 2)])
• Выводит список s от 4 до 100, где игрок может выиграть за 2 хода (F(s, 2) = True)


1⃣3⃣ print([s for s in range(4, 100 + 1) if F(s, 3) and not F(s, 1)])
• Выводит список s от 4 до 100, где игрок может выиграть за 3 хода, но не за 1 (F(s, 3) = True и F(s, 1) = False)


1⃣4⃣ print([s for s in range(4, 100 + 1) if F(s, 4) and not F(s, 2)])
• Выводит список s от 4 до 100, где игрок может выиграть за 4 хода, но не за 2 (F(s, 4) = True и F(s, 2) = False)



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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
5🔥5❤‍🔥42👍1
🚩🚩 Разбор номера 19254 #kege по информатике #ЕГЭ24
Автор: ЕГКР
Уровень: Базовый


🚩 Условие задачи:
Текстовый файл состоит из символов F, G, Q, R, S и W. Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых подстрока FSRQ встречается ровно 80 раз.


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


👩‍💻 Код решения:
s = open('0. files/24.txt').readline()
s = s.split('FSRQ')
maxi = 0
for i in range(len(s)-80):
r = 'SRQ' + 'FSRQ'.join(s[i:i+81]) + 'FSR'
maxi = max(maxi, len(r))
print(maxi)

Ответ: 2379


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

1⃣ s = open('0. files/24.txt').readline()
Открываем файл 24.txt из папки 0. files и читаем первую строку, сохраняя её в переменную s


2⃣ s = s.split('FSRQ')
Разбиваем строку s на список подстрок, используя разделитель 'FSRQ'


3⃣ maxi = 0
Инициализируем переменную maxi для хранения максимальной длины найденной подстроки


4⃣ for i in range(len(s)-80):
Запускаем цикл по индексам списка s, оставляя запас в 80 элементов для обработки последующих 81 элементов


5⃣ r = 'SRQ' + 'FSRQ'.join(s[i:i+81]) + 'FSR'
Формируем строку r, соединяя 81 подстроку из списка s с разделителем 'FSRQ', добавляя префикс 'SRQ' и суффикс 'FSR'


6⃣ maxi = max(maxi, len(r))
Обновляем maxi, если длина строки r больше текущего значения maxi


7⃣ print(maxi)
Выводим максимальную найденную длину строки r


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

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