Информатика | Илья Андрианов | itpy 🧑‍💻
1.06K 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
👩‍💻 Все методы строк в Python, которые могут понадобиться на ЕГЭ #tpy

🚩 .REPLACE()

Метод .replace(old, new, count) используется для замены подстроки old на new в строке. Можно указать count, чтобы ограничить количество замен.
s = "Hello, World!"
new_s = s.replace("Hello", "Hi")
print(new_s) # Вывод: "Hi, World!"


🚩 .INDEX()

Метод .index(substring) возвращает индекс первого вхождения подстроки substring в строке. Если подстрока не найдена, возникает ошибка.
s = "Hello, World!"
index = s.index("World")
print(index) # Вывод: 7


🚩 .COUNT()

Метод .count(substring) возвращает количество вхождений подстроки substring в строке.
s = "How much wood would a woodchuck chuck if a woodchuck could chuck wood?"
count = s.count("wood")
print(count) # Вывод: 4


🚩 .SPLIT()

Метод .split(separator) разбивает строку на подстроки по указанному разделителю separator и возвращает список подстрок.
s = "Split this s into words"
words = s.split(" ")
print(words) # Вывод: ["Split", "this", "s", "into", "words"]


🚩 "".JOIN()

Метод "".join(iterable) объединяет строки из итерируемого объекта в одну строку, разделяя их пустой строкой.
words = ["Join", "these", "words"]
s = "".join(words)
print(s) # Вывод: "Jointhesewords"


🚩 .ISDIGIT()

Метод .isdigit() проверяет, состоит ли строка только из цифровых символов. Возвращает True или False.
number = "12345"
is_digit = number.isdigit()
print(is_digit) # Вывод: True


Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
1464
This media is not supported in your browser
VIEW IN TELEGRAM
2⃣4⃣ Шпаргалка ЕГЭ | Задание #ЕГЭ24 #шпора

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

Поставь ❤️‍🔥, отправь другу, и забирай несколько полезных функций, которые уже ждут тебя здесь:

🚩 Чтение файла для 24 номера:
s = open('24.txt').readline()


🚩 Способ замены подстроки из файла:
s = s.replace('1', '2').replace('W', 'R')


🚩 Ищем подстроку наибольшей длины:
print(max([len(x) for x in s.split()]))


🚩 Ищем в строке s четверки символов:
for i in range(len(s)-3):
if s[i:i+4] in ('KLMN', 'LMNK', 'MNKL', 'NKLM'):


Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
1255
🔤🔤🔤🔤🔤🔤🔤🔤 🔤🔤 🔤🔤🔤🔤🔤🔤🔤

🚩 Ребята, завтра я буду помогать вам, отвечать на вопросы и решать задания в прямом эфире. Присоединяйтесь к нашему чату и присылайте все ваши вопросы/задания туда, постараюсь оперативно отвечать и делать разборы.
Please open Telegram to view this post
VIEW IN TELEGRAM
1266
Дорогие подписчики! Наступил час, когда ваш труд и усердие будут испытаны экзаменом. Помните, что вы проделали огромную работу, и теперь настал момент продемонстрировать всю свою подготовку. Верьте в себя, вы способны преодолеть любые трудности! Ни пуха, ни пера 🍀
Please open Telegram to view this post
VIEW IN TELEGRAM
331066
🚩 Разбор ДВ #2024 номера #8 по информатике #ЕГЭ8

🚩 Условие задачи:
Определите количество 9-тиричных б-тизначных чисел, которые не начинаются с нечетных цифр, не оканчиваются цифрами 2 или 3, содержат не менее двух цифр 1



👩‍💻 Код решения:
from itertools import *
cnt = 0
for x in product('012345678', repeat=6):
num = ''.join(x)
if num[0] != "0" and num[0] not in '1357':
if num[-1] not in '23' and num.count('1') >= 2:
cnt += 1
print(cnt)

# Ответ: 19868


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

1. from itertools import *
Импорт модуля `itertools`, который предоставляет функции для работы с итераторами.


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


3. for x in product('012345678', repeat=6):
Цикл `for`, в котором переменная `x` принимает все возможные комбинации длиной 6 из элементов '012345678', сгенерированные с помощью функции `product` из модуля `itertools`.


4. num = ''.join(x)
Создание строки `num`, объединяя элементы кортежа `x` в одну строку.


5. if num[0] != "0" and num[0] not in '1357':
Проверка условия: первая цифра числа `num` не равна "0" и не содержится в строке '1357'.


6. if num[-1] not in '23' and num.count('1') >= 2:
Дополнительная проверка: последняя цифра числа `num` не содержится в строке '23' и количество цифр '1' в числе `num` больше или равно 2.


7. cnt += 1
Увеличение значения переменной `cnt` на 1 в случае, если число `num` удовлетворяет всем условиям.


8. print(cnt)
Вывод на экран значения переменной `cnt`, которая содержит количество чисел `num`, удовлетворяющих заданным условиям.


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

🚩 Условие задачи:
Для какого наименьшего натурального числа А логическое выражение истинно при любом целом положительном значении переменной х:
(ДЕЛ(x, 2) → ¬ДЕЛ(x, 5) ) ∨ (x + A >= 70)



👩‍💻 Код решения:
def F(x, A):
return (((x % 2 == 0) <= (x % 5 != 0)) or (x + A >= 70))

for A in range(1, 1000):
if all(F(x, A) for x in range(1, 10000)):
print(A)
break

# Ответ: 60


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

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


2. return (((x % 2 == 0) <= (x % 5 != 0)) or (x + A >= 70))
Возвращение значения, которое зависит от выполнения логических условий: (x четное <= x не делится на 5) или (сумма x и A больше или равна 70).


3. for A in range(1, 1000):
Цикл `for`, в котором переменная `A` принимает значения от 1 до 999.


4. if all(F(x, A) for x in range(1, 10000)):
Проверка, что для всех значений `x` от 1 до 9999 функция `F(x, A)` возвращает `True`.


5. print(A)
Вывод на экран значения `A`, при котором условие для всех `x` выполняется.


6. break
Прерывание цикла после первого найденного значения `A`, удовлетворяющего условию для всех `x`.


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
833
🚩🚩 Разбор ДВ #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 номера #13 по информатике #ЕГЭ13

🚩 Условие задачи:
Сеть задана IP-адресом 106.184.0.0 и сетевой маской 255.248.0.0.
Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 2?



👩‍💻 Код решения:
from ipaddress import *
net = ip_network("106.184.0.0/255.248.0.0", 0)
cnt = 0
for ip in net:
if f'{ip:b}'.count('1') % 2 != 0:
cnt += 1
print(cnt)

# Ответ: 262144


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

1. from ipaddress import *
Импорт всех объектов из модуля `ipaddress`, который предоставляет классы для работы с IP-адресами и сетями.


2. net = ip_network("106.184.0.0/255.248.0.0", 0)
Создание объекта сети IP с помощью функции `ip_network`, где указаны начальный IP-адрес "106.184.0.0" и маска подсети "255.248.0.0".


3. cnt = 0
Инициализация переменной `cnt` для подсчета количества IP-адресов с определенным свойством.


4. for ip in net:
Цикл `for`, который проходит по всем IP-адресам в созданной сети `net`.


5. if f'{ip:b}'.count('1') % 2 != 0:
Проверка условия: если количество единиц в двоичном представлении IP-адреса `ip` нечетное.


6. cnt += 1
Увеличение счетчика `cnt` на 1, если условие из предыдущей строки выполнено для текущего IP-адреса.


7. print(cnt)
Вывод на экран количества IP-адресов, для которых количество единиц в двоичном представлении нечетное.


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

🚩 Условие задачи:
Алгоритм вычисления значения функции F[n], где п - натуральное число, задан следующими соотношениями:
F(n) = 1 при n = 1
F(n) = 2 * n * F(n - 1), если п >1
Чему равно значение выражения (F(2024) - 4 * F(2023)) / F(2022) ?


👩‍💻 Код решения:
from functools import *
@lru_cache(None)
def F(n):
if n == 1:
return 1
if n > 1:
return 2 * n * F(n - 1)

for i in range(2025):
F(i)

print((F(2024) - 4 * F(2023)) // F(2022))

# Ответ: 16362024


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

1. from functools import *
Импорт модуля `functools`, который предоставляет несколько полезных функций, связанных с функциональным программированием.


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

3. def F(n):
Объявление функции `F` с аргументом `n`.


4. if n == 1:
Проверка условия: если `n` равно 1.

5. if n > 1:
Проверка условия: если `n` больше 1.


6. return 2 * n * F(n - 1)
Возвращение результата умножения `2 * n` на рекурсивный вызов функции `F` с аргументом `(n - 1)`.


7. for i in range(2025):
Цикл `for`, который проходит по значениям от 0 до 2024 (не включая 2025).


8. F(i)
Вызов функции `F` для каждого значения `i` в диапазоне от 0 до 2024.


9. print((F(2024) - 4 * F(2023)) // F(2022))
Вывод на экран результата выражения `(F(2024) - 4 * F(2023)) // F(2022)`, которое содержит вызовы функции `F` с различными аргументами.


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

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

Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 20.



👩‍💻 Код решения:
R = []
for n in range(2000):
s = bin(n)[2:]
if s.count('1') % 2 == 0:
s = '10' + s[2:] + '0'
else:
s = '11' + s[2:] + '1'
r = int(s, 2)
if r < 20:
R.append(n)
print(max(R))

# Ответ: 12


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

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


2. for n in range(2000):
Цикл `for`, который проходит по значениям от 0 до 1999.


3. s = bin(n)[2:]
Преобразование числа `n` в двоичное представление и сохранение его в переменной `s`, исключая первые два символа, которые обозначают приставку "0b".


4. if s.count('1') % 2 == 0:
Проверка условия: если количество единиц в строке `s` делится на 2 без остатка.


5. s = '10' + s[2:] + '0'
Изменение строки `s`, добавляя приставку "10" в начало и "0" в конец исходной строки `s`, начиная с третьего символа.


6. else:
Выполняется, если условие в пункте 4 не выполнено.


7. s = '11' + s[2:] + '1'
Изменение строки `s`, добавляя приставку "11" в начало и "1" в конец исходной строки `s`, начиная с третьего символа.


8. r = int(s, 2)
Преобразование строки `s` из двоичного представления в целое число и сохранение результата в переменной `r`.


9. if r < 20:
Проверка условия: если значение `r` меньше 20.


10. R.append(n)
Добавление значения `n` в список `R`.

11. print(max(R))
Вывод на экран максимального значения из списка `R`.


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

🚩 Условие задачи:
Значение арифметического выражения 3**100 - х, где х - целое положительное число, не превышающее 2030, записали в троичной системе счисления.
Определите наименьшее значение х, при котором в троичной записи числа, являющегося значением данного арифметического выражения, содержится ровно два нуля.
В ответе запишите число в десятичной системе счисления.


👩‍💻 Код решения:
 
for x in range(1, 2030):
n = 3**100 - x
R = []
while n > 0:
R = [n % 3] + R
n //= 3
if R.count(0) == 2:
print(x)
break

# Ответ: 9


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

1. for x in range(1, 2030):
Цикл `for`, который проходит по значениям `x` от 1 до 2029.


2. n = 3**100 - x
Вычисление значения `n` как разности между `3` в степени `100` и `x`.


3. R = []
Создание пустого списка `R`, который будет содержать цифры в троичной системе счисления.


4. while n > 0:
Цикл `while`, который выполняется до тех пор, пока `n` больше нуля.


5. R = [n % 3] + R
Добавление остатка от деления числа `n` на 3 в начало списка `R`.

6. n //= 3
Целочисленное деление числа `n` на 3 для перехода к следующей цифре троичной записи.


7. if R.count(0) == 2:
Проверка условия: если в списке `R` ровно два раза встречается цифра 0.

8. print(x)
Вывод значения `x`, которое соответствует условиям задачи.

9. break
Прерывание цикла, если было найдено первое подходящее значение `x`.

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

🚩 Условие задачи:
Дано арифметическое выражение:
123XAB_31 + 3CEX321_31

Переменная х в каждом числе обозначает неизвестную цифру 31-ричной системы счисления. Необходимо найти наибольшее возможное значение х, при котором значение данной суммы кратно 17. В ответе необходимо указать частное от деления значения данной суммы на 17 в десятичной системе счисления. Основание системы счисления указывать не
нужно.


👩‍💻 Код решения:
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
for x in alphabet[:31]:
A = int(f'123{x}AB', 31)
B = int(f'3CE{x}321', 31)
if (A + B) % 17 == 0:
print((A + B) // 17)

# Ответ: 179431046


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

1. alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
Создание отсортированного списка `alphabet`, содержащего символы цифр и заглавных латинских букв.


2. for x in alphabet[:31]:
Цикл `for`, который перебирает первые 31 элемент из списка `alphabet`.


3. A = int(f'123{x}AB', 31)
Преобразование строки `f'123{x}AB'` в число в системе счисления 31 и сохранение этого числа в переменной `A`.


4. B = int(f'3CE{x}321', 31)
Преобразование строки `f'3CE{x}321'` в число в системе счисления 31 и сохранение этого числа в переменной `B`.


5. if (A + B) % 17 == 0:
Проверка условия: если сумма чисел `A` и `B` делится на 17 без остатка.


6. print((A + B) // 17)
Вывод на экран частного от деления суммы чисел `A` и `B` на 17.


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

🚩 Условие задачи:
Напишите программу, которая перебирает целые числа, большие 600 000, в порядке возрастания и ищет среди них такие, среди делителей которых есть хотя бы одно число, оканчивающееся на 7, но не равное 7 и самому числу. Необходимо вывести первые 5 таких чисел, и наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу.
Формат вывода: для каждого из 5 таких найденных чисел в отдельной строке сначала выводится само число, затем  — наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу.


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

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

# Ответ:
# 600001 437
# 600002 47
# 600003 1227
# 600005 217
# 600012 16667



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

🚩 Условие задачи:
Пусть S - последовательность из N целых чисел, пронумерованных подряд, начиная с 1. Обозначим S_i,S_j, S_k как три элемента последовательности S, где і < j < k. Определите в последовательности S три таких члена S_i, S_j, S_k, что S_i > S_j, S_k > S_j и значение выражения (S_i -S_i) + (S_k-S_j) максимально.
Гарантируется, что в последовательности есть три числа S_i, S_j, S_k, удовлетворяющие условию задачи.

Входные данные
Дано два входных файла [файл А и файл В), каждый из которых в первой строке содержит число N [5 < N < 10 000 000] - количество целых чисел. Каждая из следующих N строк содержит одно целое число, не превышающее по модулю 1000.
В ответ укажите два числа: сначала значение искомой величины для файла А, затем - для файла В.

👩‍💻 Код решения:
f = open('27.txt')
n = int(f.readline())
M = [int(i) for i in f]
res = 0
for i in range(n):
for j in range(i+1, n):
for k in range(j+1, n):
s1 = M[i]
s2 = M[j]
s3 = M[k]
if s1 > s2 < s3:
res = max(res, (s1 - s2) + (s3 - s2))
print(res)
res = 0
m1 = m2 = m3 = r1 = 0
for i in range(n - 2):
m1 = max(m1, M[i])
if m1 - M[i+1] > r1:
r1 = m1 - M[i + 1]
m2 = M[i + 1]
m3 = M[i + 2]
res = max(res, m3 - m2 + r1)
print(res)


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

Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
74
Вот проголосовать на выборах можно в любой удобной точке страны, просто сделай пару кликов на Госуслугах для выбора другой локации. (Кстати, можно голосовать и онлайн).

Было бы славно, если бы существовала возможность приехать сдать ЕГЭ в Москве или Калининграде 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
92
🚩 Разбор ДВ #2024 номера #7 по информатике #ЕГЭ7

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

🚩 Условие задачи:
Текстовый файл состоит из заглавных букв латинского алфавита А, B, C, D, E и F.
Определите максимальное количество идущих подряд символов в прилагаемом файле, среди которых пара символов DE (в указанном порядке) встречается не более 240 раз.
Для выполнения этого задания следует написать программу.


👩‍💻 Код решения:
s = open('24.txt').readline()
s = s.replace('DE', 'D E').split()
maxi = -1
for i in range(len(s)):
r = ''.join(s[i:i+241])
maxi = max(maxi, len(r))
print(maxi)



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

1. s = open('24.txt').readline()
Чтение строки из файла '24.txt' и сохранение этой строки в переменной `s`.


2. s = s.replace('DE', 'D E').split()
Замена подстроки 'DE' на 'D E' в строке `s` с последующим разделением строки на список слов.


3. maxi = -1
Инициализация переменной `maxi` c начальным значением -1 для хранения максимальной длины подстроки.


4. for i in range(len(s)):
Цикл `for`, который проходит по индексам элементов в списке `s`.


5. r = ''.join(s[i:i+241])
Создание строки `r`, объединив элементы списка `s` от индекса `i` до индекса `i+241`.

6. maxi = max(maxi, len(r))
Обновление переменной `maxi` значением, равным максимуму между текущим значением `maxi` и длиной строки `r`.


7. print(maxi)
Вывод наибольшей длины строки `r` из всех подстрок в переменной `s`.


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
126421