This media is not supported in your browser
VIEW IN TELEGRAM
Интересная задачка 13 номера c kompege.ru от Л. Шастина.
from ipaddress import *
for mask in range(32+1):
net = ip_network(f'175.122.80.13/{mask}', 0)
print(net)
Для решения необходимо знать:
Количество единиц в маске подсети указывает, сколько битов адреса IP отведено для сети, а оставшиеся биты - для узлов.
Для вычисления количества возможных значений маски подсети можно использовать следующую формулу: 2**n - 2
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
По заданным 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
from ipaddress import *
Импорт всех функций из модуля ipaddress для работы с сетевыми адресами.
net = ip_network('129.131.130.64/255.255.192.0', 0)
Создание объекта сети net с заданным IP-адресом и маской подсети, причем последний аргумент указывает на коррекцию префикса.
print(net)
Вывод объекта сети net.
# 129.131.128.0/18
Комментарий, указывающий на правильность адресации объекта сети: IP-адрес 129.131.128.0 с маской /18.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Для узла с 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])
from ipaddress import *
Импорт всех функций из модуля ipaddress для работы с сетевыми адресами.
Цикл for mask in range(32+1):
Для перебора возможных значений маски сети от 0 до 32 (включительно).
net = ip_network(f'224.128.112.142/{mask}', 0)
Создание объекта сети net с заданным IP-адресом и переменной маской подсети, где последний аргумент указывает на коррекцию префикса.
if str(net) == f'224.128.96.0/{mask}':
Условие проверки соответствия адреса сети определенному значению.
print(str(net.netmask).split('.')[2])
Вывод третьего октета маски подсети из объекта сети net, если условие выполнено.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Два узла, находящиеся в одной сети, имеют 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
from ipaddress import *
Импорт всех функций из модуля ipaddress для работы с сетевыми адресами.
R = []
Создание пустого списка R, куда будут добавляться результаты.
Цикл for mask in range(32+1):
Для перебора возможных значений маски сети от 0 до 32 (включительно).
net1 = ip_network(f'121.171.5.70/{mask}', 0)
Создание объекта сети net1 с заданным IP-адресом и переменной маской подсети, с коррекцией префикса.
net2 = ip_network(f'121.171.5.107/{mask}', 0)
Создание объекта сети net2 с другим IP-адресом, но той же маской подсети.
if net1 == net2:
Условие проверки, совпадают ли сети net1 и net2.
R.append(net1.num_addresses)
Добавление количества адресов в сети net1 в список R.
print(min(R))
Вывод минимального значения количества адресов среди всех сетей, для которых условие совпадения сетей выполнилось.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор задачи: (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
from ipaddress import *
Импорт всех функций из модуля ipaddress для работы с сетевыми адресами.
net = ip_network('203.111.195.0/255.255.240.0', 0)
Создание объекта сети net с заданным IP-адресом и маской подсети, с коррекцией префикса.
cnt = 0
Инициализация счетчика cnt для подсчета количества IP-адресов, удовлетворяющих условиям.
Цикл for ip in net:
Для перебора всех IP-адресов в сети net.
s = f'{ip:b}'
Перевод IP-адреса в бинарное представление и сохранение в строковую переменную s.
if s.count('0') % 3 == 0:
Проверка условия: количество нулей в бинарном представлении делится на 3 без остатка.
if '111' in s and '000' in s:
Дополнительная проверка наличия подстрок '111' и '000' в бинарном представлении.
cnt += 1
Увеличение счетчика, если IP-адрес удовлетворяет обоим условиям.
print(cnt)
Вывод общего количества IP-адресов, которые соответствуют условиям.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор задачи: (Л. Шастин)
Сеть, в которой содержится узел с 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
from ipaddress import *
Импорт всех функций из модуля ipaddress для работы с IP-адресами и сетями.
cnt = 0
Инициализация переменной cnt для подсчета количества IP-адресов, удовлетворяющих условиям.
for A in range(0, 255+1):
Цикл для перебора значения A от 0 до 255 включительно.
net = ip_network(f'207.0.{A}.167/255.255.255.192', 0)
Создание объекта сети net с динамически формируемым IP-адресом, маской подсети и коррекцией префикса.
if all(f'{ip:b}'[:16].count('0') > f'{ip:b}'[16:].count('0') for ip in net):
Проверка условия: количество нулей в первой половине бинарного представления IP-адреса больше чем во второй половине для всех IP-адресов в сети.
cnt += 1
Увеличиваем счетчик, если IP-адрес удовлетворяет условию.
print(cnt)
Вывод количества IP-адресов в созданных сетях, соответствующих условиям.
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Подготовили для вас методическое пособие по решению 13 номера! Сохраняйте все, что нужно знать о задании
В комментариях к этому посту закреплю файл в формате pdf
from ipaddress import *
net = ip_network('адрес сети/маска')
net.netmask
net.num_addresses
net.network_address
for mask in range(33):
net = ip_network(f'адрес узла/{mask}', 0)
for ip in net:
ip_b = f'{ip:b}'
Информатика ЕГЭ | itpy
Поддержать автора: boosty
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: М. Ишимов
Уровень: Средний
Сеть, в которой содержится узел с IP-адресом 246.51.128.202, задана маской сети 255.255.A.0, где A - некоторое допустимое для записи маски число.
Определите минимальное значение A, для которого для всех IP-адресов этой сети в двоичной записи IP-адреса количество нулей в левых двух байтах не более количества нулей в правых двух байтах.
Аудио с пояснением к коду решения оставлю в комментариях.
👩💻 Код решения:
from ipaddress import *
for A in [0, 128, 192, 224, 240, 248, 252, 254, 255]:
net = ip_network(f'246.51.128.202/255.255.{A}.0', 0)
if all(f'{ip:b}'[:16].count('0') <= f'{ip:b}'[16:].count('0') for ip in net):
print(A)
break
# Ответ: 254
from ipaddress import *
Импортируются все функции из модуля ipaddress.
for A in [0, 128, 192, 224, 240, 248, 252, 254, 255]:
Цикл for перебирает значения из списка [0, 128, 192, 224, 240, 248, 252, 254, 255], присваивая каждое значение переменной A.
net = ip_network(f'246.51.128.202/255.255.{A}.0', 0)
Создается объект net, представляющий сеть IPv4 с помощью вызова функции ip_network. IP-адрес задается как 246.51.128.202, маска подсети формируется с помощью строки 255.255.{A}.0.
if all(f'{ip:b}'[:16].count('0') <= f'{ip:b}'[16:].count('0') for ip in net):
Выполняется условие, в котором проверяется, что для каждого IP-адреса в сети net количество битов, равных 0, в первых 16 битах меньше или равно количеству битов, равных 0, в оставшихся битах.
print(A)
Если условие выполняется, то выводится значение переменной A.
break
Выполняется прерывание цикла, так что после вывода значения переменной A программа завершает выполнение.
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Сеть задана 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
Алгоритм вычисления значения функции 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
from ipaddress import *
for mask in range(32+1):
net = ip_network(f'170.155.137.181/{mask}', 0)
if str(net) == f'170.155.136.0/{mask}':
print(net.netmask)
from ipaddress import *
maxi = []
for mask in range(32+1):
net = ip_network(f'170.155.137.181/{mask}', 0)
if str(net) == f'170.155.136.0/{mask}':
maxi.append(int(str(net.netmask).split('.')[2]))
print(max(maxi))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
from ipaddress import *
net = ip_network('106.184.0.0/255.255.240.0', 0)
cnt = 0
for ip in net:
s = f'{ip:b}'
if s.count('1') % 3 == 0:
cnt += 1
print(cnt)
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: М. Ишимов
Уровень: Базовый
Сеть задана IP-адресом 119.124.96.0 и маской сети 255.255.240.0. Сколько в этой сети IP-адресов, двоичная запись которых оканчивается на 0?
from ipaddress import *
net = ip_network('119.124.96.0/255.255.240.0', 0)
cnt = 0
for ip in net:
s = f'{ip:b}'
# if s.endswith('0'):
if s[-1] == '0':
cnt += 1
print(cnt)
# Ответ: 2048
1️⃣
from ipaddress import *
Импортируем все классы и функции из модуля ipaddress, который обеспечивает удобную работу с IP-адресами и сетями
2️⃣
net = ip_network('119.124.96.0/255.255.240.0', 0)
Создаем объект сети net с заданным IP-адресом и маской подсети, указываем, что это IPv4 сеть с использованием маски в десятичном формате
3️⃣
cnt = 0
Инициализируем счетчик cnt, который будет хранить количество IP-адресов, удовлетворяющих определенному условию
4️⃣
for ip in net:
Начинаем цикл, который перебирает каждый IP-адрес в заданной сети net
5️⃣
s = f'{ip:b}'
Преобразуем текущий IP-адрес ip в двоичное строковое представление с помощью форматирования
6️⃣
# if s.endswith('0'):
Cтарая версию проверки, тоже работает.
7️⃣
if s[-1] == '0':
Проверяем, оканчивается ли двоичная строка s на '0', то есть является ли последний бит нулем
8️⃣
cnt += 1
Увеличиваем счетчик cnt на единицу, если последний бит IP-адреса равен нулю
9️⃣
print(cnt)
Выводим количество IP-адресов в сети net, у которых последний бит равен нулю
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Пресдача 04.07.2024
Уровень: Базовый
Сеть задана IP-адресом 115.192.0.0 и сетевой маской 255.192.0.0.
Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 3?
Во всех ФИПИ вариантах/пробниках и на основном экзамене был представлен именно этот прототип, занятное наблюдение!
from ipaddress import *
net = ip_network('115.192.0.0/255.192.0.0', 0)
cnt = 0
for ip in net:
b_ip = f'{ip:b}'
if b_ip.count('1') % 3 != 0:
cnt += 1
print(cnt)
# Ответ: 2796202
1⃣
from ipaddress import *
Импортируем все функции из модуля ipaddress для работы с IP адресами и сетями.
net = ip_network('115.192.0.0/255.192.0.0', 0)
Создаём объект сети net, используя адрес сети '115.192.0.0' и маску подсети '255.192.0.0'. 0 указывает на IPv4-адрес.
cnt = 0
Инициализируем переменную счётчика cnt для подсчета IP-адресов, удовлетворяющих условию.
for ip in net:
Проходим в цикле по каждому IP-адресу в сети net.
b_ip = f'{ip:b}'
Преобразуем текущий IP-адрес в двоичное строковое представление и сохраняем его в переменную b_ip.
if b_ip.count('1') % 3 != 0:
Проверяем, что количество единиц в двоичном представлении IP-адреса не кратно 3.
cnt += 1
Если условие выполняется, увеличиваем счётчик cnt на 1.
print(cnt)
Выводим итоговое значение счётчика cnt, которое соответствует количеству подходящих IP-адресов.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
3 5 5 5
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Демоверсия 2025
Уровень: Базовый
Сеть задана IP-адресом 172.16.168.0 и маской сети 255.255.248.0.
Сколько в этой сети IP-адресов, для которых количество единиц в двоичной записи IP-адреса не кратно 5?
В ответе укажите только число
Самый популярный прототип 13 номера, весь 2024 год ФИПИ публиковала именно такие задачи, есть вероятность, что в этом году прототип слегка изменится.
from ipaddress import *
net = ip_network('172.16.168.0/255.255.248.0', 0)
cnt = 0
for ip in net:
s = f'{ip:b}'
if s.count('1') % 5 != 0:
cnt += 1
print(cnt)
# Ответ: 1663
from ipaddress import *
Импортируем все функции и классы из модуля ipaddress, который позволяет работать с IP-адресами и сетями.
net = ip_network('172.16.168.0/255.255.248.0', 0)
Создаем объект сети на основе IP-адреса и маски подсети, заданной в формате CIDR. Здесь '0' указывает на использование маски по умолчанию.
cnt = 0
Инициализируем счётчик cnt равным 0. Этот счётчик будет использоваться для подсчета количества IP-адресов, удовлетворяющих заданному условию.
for ip in net:
Начинаем цикл, который перебирает все IP-адреса в заданной сети net.
s = f'{ip:b}'
Преобразуем текущий IP-адрес ip в двоичную строку и сохраняем её в переменной s.
if s.count('1') % 5 != 0:
Проверяем, если количество единиц в двоичном представлении IP-адреса не делится на 5 без остатка.
cnt += 1
Если условие выполняется, увеличиваем счётчик cnt на 1.
print(cnt)
Выводим значение счётчика cnt, которое теперь содержит количество IP-адресов, не удовлетворяющих условию (количество единиц в двоичном представлении которых не делится на 5).
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
2 7 4 4
Собрали все полезные функции из библиотеки
ipaddress
для нового 13 номера ЕГЭ по информатике. В меню навигации ты найдешь шпаргалки по остальным номерам! from ipaddress import *
net = ip_network('адрес сети/маска')
net.netmask
for mask in range(33):
net = ip_network(f'адрес узла/{mask}', 0)
for ip in net:
ip_b = f'{ip:b}'
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
3 8 4 3
#реклама
Собрали все полезные функции из библиотеки
ipaddress
для нового 13 номера ЕГЭ по информатике. В меню навигации ты найдешь шпаргалки по остальным номерам!from ipaddress import *
net = ip_network('адрес сети/маска')
net.netmask
for mask in range(33):
net = ip_network(f'адрес узла/{mask}', 0)
for ip in net:
ip_b = f'{ip:b}'
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥7👍6 5
#реклама
Собрали все полезные функции из библиотеки
ipaddress
для нового 13 номера ЕГЭ по информатике. В меню навигации ты найдешь шпаргалки по остальным номерам!from ipaddress import *
net = ip_network('адрес сети/маска')
net.netmask
for mask in range(33):
net = ip_network(f'адрес узла/{mask}', 0)
for ip in net:
ip_b = f'{ip:b}'
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥11 6🔥4 4
Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.
Сеть задана ІР-адресом одного из входящих в неё узлов 97.191.34.206 и сетевой маской 255.255.255.240. Определите наибольший IP-адрес данной сети, который может быть присвоен компьютеру.
from ipaddress import *
net = ip_network('97.191.34.206/255.255.255.240', 0)
for ip in net:
print(ip) # 97.191.34.206
# 97.191.34.207 - не учитываем так как широковещательный
#Ответ: 9719134206
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥10👍7🫡4
Автор: Сергей Горбачев
Уровень: Средний
Сеть задана IP-адресом 140.116.194.0 и маской сети 255.255.240.0. Сколько в этой сети IP-адресов, в двоичной записи которых каждый из четырёх байтов оканчивается нулём?
from ipaddress import *
net = ip_network('140.116.194.0/255.255.240.0', 0)
cnt = 0
for ip in net:
b = f'{ip:b}'
if b[:8][-1] == '0':
if b[8:16][-1] == '0':
if b[16:24][-1] == '0':
if b[24:][-1] == '0':
cnt += 1
print(cnt)
Ответ: 1024
from ipaddress import *
• Импортируются все классы и функции из модуля ipaddress, используемого для работы с IP-адресами и сетями.
net = ip_network('140.116.194.0/255.255.240.0', 0)
• Создаётся объект сети net с заданным IP-адресом и маской. Аргумент 0 указывает, что используется маска, а не префикс.
cnt = 0
• Инициализируется счётчик для подсчёта подходящих IP-адресов.
for ip in net:
• Цикл перебирает все IP-адреса в заданной сети.
b = f'{ip:b}'
• Преобразует IP-адрес в строку его двоичного представления (без точек и пробелов).
if b[:8][-1] == '0':
• Проверяет, оканчивается ли первый байт (первые 8 бит) на 0.
if b[8:16][-1] == '0':
• Проверяет, оканчивается ли второй байт (биты с 8 по 15) на 0.
if b[16:24][-1] == '0':
• Проверяет, оканчивается ли третий байт (биты с 16 по 23) на 0.
if b[24:][-1] == '0':
• Проверяет, оканчивается ли четвёртый байт (биты с 24 по 31) на 0.
cnt += 1
• Увеличивает счётчик, если все четыре байта оканчиваются нулём.
• Выводит количество IP-адресов, удовлетворяющих условию задачи.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6👍3❤2🔥2