Информатика в школе и дома: ОГЭ, ЕГЭ и ДэРэ
1,1K подписчиков • 1K просмотров • 6 месяцев назад

Безумно понравилась задача А. Минака (№6907 с сайта К.Ю. Полякова) про подсчет количества IP-адресов. Решаю полуаналитически в паре с Python

(№ 6907) (А. Минак) В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая - к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и маске сети. Сеть задана IP-адресом 140.19.96.0 и маской сети 255.255.248.0. Сколько в этой сети IP-адресов, для которых количество единиц в каждом байте IP-адреса одинаково?

Фрагменты кода:
ip = (140 << 24) + (19 << 16) + (96 << 8) + 0
mask = (255 << 24) + (255 << 16) + (248 << 8) + 0
print(bin(ip)[2:].zfill(32))
print(bin(mask)[2:].zfill(32))

##from itertools import *
##k = 0
##for x in product('01',repeat=8):
##  s = ''.join(x)
##  if s.count('1') == 3:
##    k+=1
##        
##print(k, 3*56)
k = 0
for x in range(256):
  s = bin(x)[2:].zfill(8)
  if s.count('1') == 3:
    k+=1
print(k)