Задание №13 — Маски подсети
В терминологии сетей ТСР/IР маской сети называют двоичное число, которое показывает, какая часть IР-адреса узла сети относится к адресу сети, а какая — к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IР-адресом 32.0.А.5, где А — некоторое допустимое для записи IР-адреса число, и маской сети 255.255.240.0.
Определите минимальное значение А, для которого для всех IР-адресов этой сети в двоичной записи IР-адреса суммарное количество единиц в левых двух байтах не более суммарного количества единиц в правых двух байтах.
В ответе укажите только число.
Правильный ответ
16
Пояснение
Решение:
Левые два байта одинаковы у всех адресов сети: даёт 1 единицу, — ни одной. Значит .
Маска 255.255.240.0 фиксирует старшую тетраду третьего байта (это ); младшая тетрада третьего байта и весь четвёртый байт свободны. Наименьшее возможное число единиц в правых двух байтах достигается, когда все свободные биты нулевые:
Условие «для всех адресов » равносильно , то есть в старшей тетраде числа должна быть хотя бы одна единица.
При старшая тетрада нулевая — не подходит. Наименьшее со старшей тетрадой и нулевой младшей тетрадой равно .
ones = lambda x: bin(x).count('1')
for A in range(0, 256):
if all(ones(32) + ones(0) <= ones((A & 240) | y) + ones(b4)
for y in range(16) for b4 in range(256)):
print(A) # 16
break
Ответ: 16