Задания
Версия для печати и копирования в MS Word
Тип 13 № 73868
i

В тер­ми­но­ло­гии сетей TCP/IP мас­кой сети на­зы­ва­ет­ся дво­ич­ное число, опре­де­ля­ю­щее, какая часть IP-ад­ре­са узла сети от­но­сит­ся к ад­ре­су сети, а какая  — к ад­ре­су са­мо­го узла в этой сети. При этом в маске сна­ча­ла (в стар­ших раз­ря­дах) стоят еди­ни­цы, а затем с не­ко­то­ро­го места  — нули.

Адрес сети по­лу­ча­ет­ся в ре­зуль­та­те при­ме­не­ния по­раз­ряд­ной конъ­юнк­ции к за­дан­но­му IP⁠-⁠ад­ре­су узла и маске.

На­при­мер, если IP⁠-⁠адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.

Узлы с IP⁠-⁠ад­ре­са­ми 206.123.209.193 и 206.123.210.118 при­над­ле­жат одной сети. Какое наи­мень­шее ко­ли­че­ство IP-ад­ре­сов, в дво­ич­ной за­пи­си ко­то­рых ровно 15 еди­ниц, может со­дер­жать­ся в этой сети?

Спрятать решение

Ре­ше­ние.

При­ведём ре­ше­ние на языке Python.

from ipaddress import *

ip1 = ip_address('206.123.209.193')

ip2 = ip_address('206.123.210.118')

otv = []

for mask in range(15,33):

net = ip_network(f'206.123.209.193/{mask}', 0)

if (ip1 in net) and (ip2 in net):

count = 0

for ip in net:

if f'{ip:b}'.count('1') == 15:

count += 1

otv.append(count)

print(min(otv))

 

Ответ: 10.

 

При­ведём ре­ше­ние Да­ни­ла Шар­ло­ва на языке Python.

from ipaddress import ip_network, ip_address

ip_b = ip_address('206.123.210.118')

for mask in range(32, -1, -1):

net = ip_network(f'206.123.209.193/{mask}',0)

if ip_b in net:

print(sum(bin(int(ip)).count('1')==15 for ip in net))

break

 

При­ведём ре­ше­ние Бо­ри­са Са­ве­лье­ва на языке Python.

from itertools import product

a = product('01', repeat = 10)

k = 0

for i in a:

if i.count('1')+14==15:

k+=1

print(k)


Аналоги к заданию № 73839: 73868 Все