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