Информатика | Илья Андрианов | itpy 🧑‍💻
1.04K 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
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 7357 #kege по информатике #ЕГЭ25

👩‍💻 Код решения:
from fnmatch import *
R = []
for x in range(53191, 10**10, 53191):
if fnmatch(str(x), '?136*'):
if str(x)[0] in '02468' and str(x)[-1] in '13579':
R.append([x, x // 53191])


for i in range(-5, 0):
print(*R[i])


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

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


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


3⃣ for x in range(53191, 10**10, 53191):
Цикл для перебора чисел от 53191 до 10**10 с шагом 53191.


4⃣ if fnmatch(str(x), '?136*'):
Проверка, соответствует ли строковое представление числа x шаблону '?136*'.


5⃣ if str(x)[0] in '02468' and str(x)[-1] in '13579':
Проверка, что первая цифра числа находится в диапазоне '02468', а последняя - в '13579'.


6⃣ R.append([x, x // 53191])
Добавление пары чисел [x, x // 53191] в список R.


7⃣ for i in range(-5, 0):
Цикл для вывода последних пяти элементов списка R.


8⃣ print(*R[i])
Вывод списка элементов с индексами с -5 по -1.


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

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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9554
Практиковать комментарии к коду решения?
Anonymous Poll
91%
Точно да
9%
Скорее нет
This media is not supported in your browser
VIEW IN TELEGRAM
2⃣5⃣ Шпаргалка ЕГЭ | Задание #ЕГЭ25 #tpy #шпора

📌 Ссылка на шпаргалку/методичку на Notion и несколько полезных функций уже здесь:

Подготовил для вас методичку по решению 25 задач. Хочу отметить, что это не просто шпаргалка, а скорее пособие, которое поможет вам создать свою собственную "шпору".

В комментариях к этому посту закреплю файл в формате pdf 👇

🚩 Функция проверки на простое число:
def Prost(x):
if x == 1:
return False
for i in range(2, int(x**0.5)+1):
if x % i == 0:
return False
return True


🚩 Функция поиска делителей числа:
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))


🚩 Пример работы с библиотекой fnmatch:
from fnmatch import * 

for x in range(23, 10 ** 9, 23):
if fnmatch(str(x), '12345?7?8'):
print(x, x//23)


🚩 Проверка числа на палиндром:
x = int(input())
if str(x) == str(x)[::-1]:
print(True)
else:
print(False)


Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора: boosty 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
👏126611
Есть идея сделать ряд постов с разбором 13 номеров, актуально?
Anonymous Poll
95%
Давайте, необходимо и интересно
5%
Легкий/скучный номер
5
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 5911 #reshu по информатике #ЕГЭ13

🚩 Условие задачи:
По заданным IP-адресу узла и маске определите адрес сети.
IP-адрес узла: 129.131.130.64
Маска: 255.255.192.0


🚩 Теоретическая справка:
Простейшая задача 13 номера с которой стоит начать изучение этих задач. Главная формула:
Адрес сети = Адрес узла & Маска сети
где & - это операция побитовой конъюнкции.


👩‍💻 Код решения:
from ipaddress import *  
net = ip_network('129.131.130.64/255.255.192.0', 0)
print(net) # 129.131.128.0/18


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

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


2⃣ net = ip_network('129.131.130.64/255.255.192.0', 0)
Создание объекта сети net с заданным IP-адресом и маской подсети, причем последний аргумент указывает на коррекцию префикса.


3⃣ print(net)
Вывод объекта сети net.


4⃣ # 129.131.128.0/18
Комментарий, указывающий на правильность адресации объекта сети: IP-адрес 129.131.128.0 с маской /18.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
8654
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 7696 #reshu по информатике #ЕГЭ13

🚩 Условие задачи:
Для узла с IP-адресом 224.128.112.142 адрес сети равен 224.128.96.0.
Чему равен третий слева байт маски? Ответ запишите в виде десятичного числа.


🚩 Теоретическая справка:
Маска сети имеет длину 32 бита и вид 1111..000 (сначала единицы, потом нули). Поэтому мы можем перебрать ее значения через for mask in range(32+1):


👩‍💻 Код решения:
from ipaddress import *
for mask in range(32+1):
net = ip_network(f'224.128.112.142/{mask}', 0)
if str(net) == f'224.128.96.0/{mask}':
print(str(net.netmask).split('.')[2])


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

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


2⃣ Цикл for mask in range(32+1):
Для перебора возможных значений маски сети от 0 до 32 (включительно).


3⃣ net = ip_network(f'224.128.112.142/{mask}', 0)
Создание объекта сети net с заданным IP-адресом и переменной маской подсети, где последний аргумент указывает на коррекцию префикса.


4⃣ if str(net) == f'224.128.96.0/{mask}':
Условие проверки соответствия адреса сети определенному значению.


5⃣print(str(net.netmask).split('.')[2])
Вывод третьего октета маски подсети из объекта сети net, если условие выполнено.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
7643
Подсчитал примерно 5-6 основных типов для 13 номера. После постов нужно ли сделать общую Шпаргалку?
Anonymous Poll
100%
Точно надо
0%
Скорее нет
113
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 10783 #kege по информатике #ЕГЭ13

🚩 Условие задачи:
Два узла, находящиеся в одной сети, имеют IP-адреса 121.171.5.70 и 121.171.5.107.
Укажите наименьшее возможное количество адресов в этой сети.


👩‍💻 Код решения:
from ipaddress import *
R = []
for mask in range(32+1):
net1 = ip_network(f'121.171.5.70/{mask}', 0)
net2 = ip_network(f'121.171.5.107/{mask}', 0)
if net1 == net2:
R.append(net1.num_addresses)
print(min(R))

Ответ: 64

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

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


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


3⃣ Цикл for mask in range(32+1):
Для перебора возможных значений маски сети от 0 до 32 (включительно).

4⃣ net1 = ip_network(f'121.171.5.70/{mask}', 0)
Создание объекта сети net1 с заданным IP-адресом и переменной маской подсети, с коррекцией префикса.

5⃣ net2 = ip_network(f'121.171.5.107/{mask}', 0)
Создание объекта сети net2 с другим IP-адресом, но той же маской подсети.

6⃣ if net1 == net2:
Условие проверки, совпадают ли сети net1 и net2.

7⃣ R.append(net1.num_addresses)
Добавление количества адресов в сети net1 в список R.


8⃣ print(min(R))
Вывод минимального значения количества адресов среди всех сетей, для которых условие совпадения сетей выполнилось.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
1087
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 12947 #kege по информатике #ЕГЭ13
Автор задачи: (C. Горбачёв)

🚩 Условие задачи:
Сеть задана IP-адресом 203.111.195.0 и маской сети 255.255.240.0. Сколько в этой сети IP-адресов, в двоичной записи которых количество нулей кратно трём, а также содержатся три подряд идущие единицы и три подряд идущих нуля одновременно?
В ответе укажите только число.


🚩 Теоретическая справка:
После того, как мы определили адрес сети с помощью функции ip_network, мы можем перебрать все IP-адреса в этой сети с помощью обычного цикла for ip in net.


👩‍💻 Код решения:
from ipaddress import *
net = ip_network('203.111.195.0/255.255.240.0', 0)
cnt = 0
for ip in net:
s = f'{ip:b}'
if s.count('0') % 3 == 0:
if '111' in s and '000' in s:
cnt += 1
print(cnt)

# Ответ: 1043


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

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


2⃣ net = ip_network('203.111.195.0/255.255.240.0', 0)
Создание объекта сети net с заданным IP-адресом и маской подсети, с коррекцией префикса.


3⃣ cnt = 0
Инициализация счетчика cnt для подсчета количества IP-адресов, удовлетворяющих условиям.


4⃣ Цикл for ip in net:
Для перебора всех IP-адресов в сети net.


5⃣ s = f'{ip:b}'
Перевод IP-адреса в бинарное представление и сохранение в строковую переменную s.


6⃣ if s.count('0') % 3 == 0:
Проверка условия: количество нулей в бинарном представлении делится на 3 без остатка.


7⃣ if '111' in s and '000' in s:
Дополнительная проверка наличия подстрок '111' и '000' в бинарном представлении.


8⃣ cnt += 1
Увеличение счетчика, если IP-адрес удовлетворяет обоим условиям.


0⃣ print(cnt)
Вывод общего количества IP-адресов, которые соответствуют условиям.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
1085
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 11835 #kege по информатике #ЕГЭ13
Автор задачи:
(Л. Шастин)

🚩 Условие задачи:
Сеть, в которой содержится узел с IP-адресом 207.0.A.167, задана маской сети 255.255.255.192, где A - некоторое допустимое для записи IP-адреса число. Определите количество значений A, для которых для всех IP-адресов этой сети в двоичной записи IP-адреса суммарное количество нулей в левых двух байтах больше суммарного количества нулей в правых двух байтах.
В ответе укажите только число.


🚩 Теоретическая справка:
По условию задачи требуется перебрать значения допустимого для формирования IP-адреса числа A. Поскольку на каждое число A отводится 1 байт (8 бит), допустимые числа находятся в диапазоне от 0 до 255 (в двоичной системе счисления - от 00000000 до 11111111).


👩‍💻 Код решения:
from ipaddress import *
cnt = 0
for A in range(0, 255+1):
net = ip_network(f'207.0.{A}.167/255.255.255.192', 0)
if all(f'{ip:b}'[:16].count('0') > f'{ip:b}'[16:].count('0') for ip in net):
cnt += 1
print(cnt)

# Ответ: 37


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

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


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


3⃣ for A in range(0, 255+1):
Цикл для перебора значения A от 0 до 255 включительно.


4⃣ net = ip_network(f'207.0.{A}.167/255.255.255.192', 0)
Создание объекта сети net с динамически формируемым IP-адресом, маской подсети и коррекцией префикса.


5⃣ if all(f'{ip:b}'[:16].count('0') > f'{ip:b}'[16:].count('0') for ip in net):
Проверка условия: количество нулей в первой половине бинарного представления IP-адреса больше чем во второй половине для всех IP-адресов в сети.


6⃣ cnt += 1
Увеличиваем счетчик, если IP-адрес удовлетворяет условию.


7⃣ print(cnt)
Вывод количества IP-адресов в созданных сетях, соответствующих условиям.


Информатика ЕГЭ | itpy 👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
965
This media is not supported in your browser
VIEW IN TELEGRAM
1⃣3⃣ Шпаргалка ЕГЭ | Задание #ЕГЭ13 #шпора

Подготовили для вас методическое пособие по решению 13 номера! Сохраняйте все, что нужно знать о задании 😼

В комментариях к этому посту закреплю файл в формате pdf 👇

Ссылка на шпаргалку/методичку на Notion и несколько полезных функций уже здесь:

🚩 Подключаем библиотеку:
from ipaddress import *


🚩 Функция для создания объекта сети IP:
net = ip_network('адрес сети/маска')


🚩 Получение маски сети:
net.netmask


🚩 Получение количество адресов:
net.num_addresses


🚩 Получение адреса сети:
net.network_address


🚩 Цикл для перебора значений маски:
for mask in range(33):
net = ip_network(f'адрес узла/{mask}', 0)


🚩 Цикл для перебора IP-адресов в сети:
for ip in net:


🚩 Представление ip-адреса в двоичном виде:
ip_b = f'{ip:b}'


Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора: boosty 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
107643
Ребят, сел делать разборы на канал.
Какой номер разбираем следующим?
Anonymous Poll
32%
5️⃣
24%
8️⃣
45%
1️⃣4️⃣
🖥 🔤🔤🔤 🔤🔤🔤🔤🔤

Здесь я и другие авторы готовы ответить на все ваши вопросы, касающиеся подготовки к ЕГЭ. Будем рады видеть вас в нашем сообществе!

Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
776
This media is not supported in your browser
VIEW IN TELEGRAM
💡Списки, и как они устроены #tpy

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

Списки в Python создаются с использованием квадратных скобок []. Вот пример создания списка с различными типами данных:
my_list = [1, 2, "Python", 3.14, True]
print(my_list)
# Выведет: [1, 2, 'Python', 3.14, True]


Элементы списка нумеруются с нуля. Чтобы получить доступ к элементу списка, указывается его индекс в квадратных скобках:
print(my_list[2])  # Обращаемся к элементу с индексом 2
# Выведет: Python


Можно изменить значение элемента списка, просто присвоив новое значение элементу по индексу:
my_list[1] = 10
print(my_list)
# Выведет: [1, 10, 'Python', 3.14, True]


Списки поддерживают различные операции, такие как добавление элемента в конец списка (append), удаление элемента по значению (remove), удаление элемента по индексу (del), слияние списков (extend), и многие другие.

🚩 Более подробную информацию про работу с списками вы можете изучить в нашей статье на Notion

Информатика ЕГЭ | itpy 👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
96532
This media is not supported in your browser
VIEW IN TELEGRAM
👩‍💻 Итерация по списку в Python с помощью метода Enumerate #tpy #useful

Если у вас нет полного понимания того, как работает функция enumerate в Python, то давайте разберемся вместе. Метод enumerate() добавляет счетчик к элементам итерируемого объекта и возвращает объект типа enumerate. Этот объект содержит пары значений: индекс элемента и сам элемент из исходного списка.

Одним из главных преимуществ использования метода enumerate является возможность преобразования объектов типа enumerate в список или кортеж с помощью методов list() и tuple() соответственно. Это облегчает работу с индексами элементов списка и упрощает процесс перебора элементов в цикле.

Информатика ЕГЭ | itpy 👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
844👍33
Что вы думаете о крайнем посте про enumerate? Хотели бы вы видеть еще подобные Python посты?
Anonymous Poll
84%
Почему бы и да 🙃
16%
Можно летом, сейчас актуальнее разборы задач 🤔
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 39243 #reshu по информатике #ЕГЭ14
Уровень: Базовый

🚩 Условие задачи:
Значение выражения 4**34 + 5 * 4**22 + 4**13 + 2 * 4**9 + 82 записали в системе счисления с основанием 16. Сколько разных цифр встречается в этой записи?


🚩 Теоретическая справка:
Функция hex() является встроенной функцией в Python, которая используется для преобразования целого числа в строку, содержащую его шестнадцатеричное представление.


👩‍💻 Код решения 1:
print(len(set(hex(4**34 + 5*4**22 + 4**13 + 2*4**9 + 82)[2:])))


👩‍💻 Код решения 2:
x = 4**34 + 5*4**22 + 4**13 + 2*4**9 + 82
s = []
while x > 0:
s.append(x % 16)
x //= 16
print(len(set(s)))

# Ответ: 6


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

1⃣ x = 4**34 + 5*4**22 + 4**13 + 2*4**9 + 82
В этой строке расчитывается значение переменной x с помощью сложных математических операций.


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


3⃣ while x > 0:
Запускается цикл while, который будет выполняться до тех пор, пока переменная x больше нуля.


4⃣ s.append(x % 16)
Добавляется остаток от деления переменной x на 16 в список s. Это делается для перевода числа в шестнадцатеричную систему счисления.

5⃣ x //= 16
Значение переменной x делится на 16 с использованием целочисленного деления, чтобы продолжить процесс перевода числа в шестнадцатеричную систему.


6⃣ print(len(set(s)))
Выводится длина множества уникальных значений списка s, что позволяет определить количество различных цифр, используемых в представлении числа x в шестнадцатеричной системе.


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

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
854
Media is too big
VIEW IN TELEGRAM
🚩 Создание стикеров прямо в Телеграм #useful

Новое обновление Телеграма позволяет создавать стикеры не выходя из приложения. Делаюсь маленьким туториалом, пользуйтесь 🫰

Информатика ЕГЭ | itpy👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
1177
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 48385 #reshu по информатике #14
Уровень: Базовый

🚩 Условие задачи:
Операнды арифметического выражения записаны в системах счисления с основаниями 13 и 18:

8x78y_13 + 79xy7_18

Определите значения x и y, при которых значение данного выражения будет наименьшим и кратно 9. Для найденных значений x и y вычислите частное от деления.


🚩 Теоретическая справка:
Строчку alphbet можно записать иначе:
from string import *
alphabet = digits + ascii_uppercase


👩‍💻 Код решения:
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
R = []
for x in alphabet[:13]:
for y in alphabet[:13]:
A = int(f'8{x}78{y}', 13)
B = int(f'79{x}{y}7', 18)
if (A + B) % 9 == 0:
R.append((A + B) // 9)
print(min(R))

# Ответ: 113024


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

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


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


3⃣ for x in alphabet[:13]:
Запускается цикл for, перебирающий элементы alphabet до 13-го (не включительно) и присваивающий их переменной x.


4⃣ for y in alphabet[:13]:
Запускается вложенный цикл for, перебирающий элементы alphabet до 13-го (не включительно) и присваивающий их переменной y.


5⃣ A = int(f'8{x}78{y}', 13)
Формируется число A, которое получается из конкатенации строк, представляющих числа в строке, и преобразуется в десятичное число по основанию 13.


6⃣ B = int(f'79{x}{y}7', 18)
Формируется число B, которое получается аналогично число A, но преобразуется в десятичное число по основанию 18.


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


8⃣ R.append((A + B) // 9)
Если условие выполняется, результат деления суммы A и B на 9 добавляется в список R.


0⃣ print(min(R))
Выводится минимальное значение из списка R, которое является ответом на задачу.


Информатика ЕГЭ | itpy 👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
9665