ЕГЭ Информатика 2024: Разбор задания 13 (маски подсетей)

Разбор тринадцатого задания демо-версии ЕГЭ по информатике 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-адресов и подсчёт количества единиц в их двоичном представлении позволили эффективно найти необходимое количество адресов, удовлетворяющих условию задачи.

Что будем искать? Например,программа