Разбор тринадцатого задания демо-версии ЕГЭ по информатике 2024 года. Задание повышенного уровня сложности, проверяющее умение работать с масками подсетей. На его выполнение отводится 3 минуты.
Теоретическая основа
В терминологии сетей TCP/IP маска сети — двоичное число, определяющее, какая часть IP-адреса относится к адресу сети, а какая — к адресу узла. Адрес сети получается применением поразрядной конъюнкции к заданному адресу узла и маске сети.
Условие задачи
Сеть задана IP-адресом 192.168.32.160 и маской сети 255.255.255.240. Необходимо определить количество IP-адресов в этой сети, для которых сумма единиц в двоичной записи чётная.
Решение на Python
Для решения задачи эффективно использовать возможности модуля ipaddress в Python.
Решение
Импортируем модуль и создадим объект сети:
from ipaddress import ip_network
net = ip_network('192.168.32.160/255.255.255.240')
Переберём все IP-адреса в сети, подсчитаем сумму единиц в их двоичном представлении и проверим чётность:
k = 0
for ip in net:
binary_ip = bin(int(str(ip)))[2:] # Преобразование в двоичное число и удаление префикса "0b"
count_ones = binary_ip.count('1')
if count_ones % 2 == 0:
k += 1
print(k) # Вывод результата
В коде:
- int(str(ip)) преобразует IP-адрес в целое число.
- bin(…)[2:] преобразует целое число в двоичную строку и удаляет префикс «0b».
- .count(‘1’) считает количество единиц в двоичной строке.
- if count_ones % 2 == 0: проверяет чётность количества единиц.
Выполнение кода даёт ответ: 8.
Задача решена с использованием модуля ipaddress в Python. Перебор IP-адресов и подсчёт количества единиц в их двоичном представлении позволили эффективно найти необходимое количество адресов, удовлетворяющих условию задачи.