На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение





Сообщение: 10
ссылка на сообщение  Отправлено: 02.03.23 13:55. Заголовок: № 5318 - не сходится ответ


def get_adress(ip, msk): 
if len(ip) == len(msk) == 4:
return tuple(ip[ i] & msk[ i] for i in range(4))
else:
return 0, 0, 0, 0


with open('26-88.txt') as f:
data = [tuple(int(x) for x in ip.split('.')) for ip in f.readlines()[1:]]
mask = (255, 255, 224, 0)
adress_dic = {}

for d in data:
adress = get_adress(d, mask)

if adress in adress_dic.keys():
adress_dic[adress].append(d)
else:
adress_dic[adress] = [d]

max_adress = {}
max_adress_counter = 0

for k in adress_dic.keys():
count = len(adress_dic[k])

if count > max_adress_counter:
max_adress_counter = count
max_adress = {k: adress_dic[k]}
elif count == max_adress_counter:
max_adress[k] = adress_dic[k]

print(''.join(tuple(str(x) for x in min(max_adress.keys()))), max_adress_counter)


В результате работы данного алгоритма получаю: 28130320 26
А в ответах: 28130320 22

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 8 [только новые]


Администратор




Сообщение: 3921
ссылка на сообщение  Отправлено: 02.03.23 14:05. Заголовок: Это задача 26-88 из ..


Это задача 26-88 из основного сборника. На этой странице есть файл с решениями всех 26-х задач.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 1 
ПрофильЦитата Ответить





Сообщение: 11
ссылка на сообщение  Отправлено: 02.03.23 14:45. Заголовок: Забыл в итоговом под..


Забыл в итоговом подсчете удалить дубликаты при помощи set. Ответ сошелся - 22. Благодарю.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 12
ссылка на сообщение  Отправлено: 02.03.23 14:45. Заголовок: Забыл в итоговом под..


На случай если кому-то будет интересно мое решение:
# Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске 
def get_adress(ip, msk):
if len(ip) == len(msk) == 4:
return tuple(ip & msk for i in range(4))
else:
return 0, 0, 0, 0


with open('26-88.txt') as f:
# Список ip-адресов
data = [tuple(int(x) for x in ip.split('.')) for ip in f.readlines()[1:]]
# Маска сети
mask = (255, 255, 224, 0)
# Словарь адресов сети
adress_dic = {}
# Распределение ip-адресов по адресам сети
for d in data:
adress = get_adress(d, mask)

if adress in adress_dic.keys():
adress_dic[adress].append(d)
else:
adress_dic[adress] = [d]

# Адреса сети, из которой отправлено максимальное количество запросов
adress_max_call = {}
# Максимальное количество запросов
max_call_count = 0
# Наполнение max_adress
for k in adress_dic.keys():
count = len(adress_dic[k]) # количество запросов по адресу сети

# Если больше, то обновить максимум
if count > max_call_count:
max_call_count = count
adress_max_call = {k: adress_dic[k]}
# Если равно, то добавить к имеющимся
elif count == max_call_count:
adress_max_call[k] = adress_dic[k]

# Минимальный адрес сети среди адресов сети, из которой отправлено максимальное количество запросов
min_adress = min(adress_max_call.keys())
# Вывод минимального адреса сети и количества различных ip-адресов
print(''.join(tuple(str(x) for x in min_adress)), len(set(adress_max_call[min_adress])))


Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 3
ссылка на сообщение  Отправлено: 09.06.23 10:27. Заголовок: f = open('26.txt..


f = open('26.txt')
n = int(f.readline())
d = {}
mask = [255, 255, 224, 0]
imask = [0, 0, 63, 255]
s = set()
for i in range(n):
ip = list(map(int, f.readline().split('.')))
aset = []
ausla = []
for j in range(4):
aset.append(mask[j] & ip[j])
ausla.append(imask[j] & ip[j])
aset = tuple(aset)
if aset == (28, 130, 32, 0):
s.add(tuple(ausla))
d[aset] = d.get(aset, 0) + 1
print(max(d, key = d.get), len(s))

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 2
ссылка на сообщение  Отправлено: 08.06.23 22:48. Заголовок: Адрес сети получаетс..


Адрес сети получается в результате применения поразрядной конъюнкции к айпи адресу и маске или к адресу узла и маске? Как найти адрес узла?

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 4
ссылка на сообщение  Отправлено: 09.06.23 10:29. Заголовок: Почему табуляция не ..


Почему табуляция не сохраняется?

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 212
ссылка на сообщение  Отправлено: 06.01.24 10:29. Заголовок: Почему табуляция не ..



 цитата:
Почему табуляция не сохраняется?


см. выше в желтой рамке:

 цитата:
Программы "заворачивайте" в тэг [ pre2]...[ /pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[ i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.



Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 213
ссылка на сообщение  Отправлено: 06.01.24 10:38. Заголовок: вариант кода: #пере..


вариант кода:
 
#перевод адреса в двоичный код
def binip(s): return ''.join([ bin(int(ip))[2::].zfill(8) for ip in s.strip().split('.')])
#перевод 32-битнгого двоичного адреса в десятичный код из 4 чисел
def intip(s): return '.'.join([str(int(s[:8],2)),str(int(s[8:16],2)),str(int(s[16:24],2)),str(int(s[24:],2))])
#определение количества 1 в маске
mask=binip('255.255.224.0').count('1')
#инициализация словаря для поступающих запросов
zapros={}
f=open('d:/26-88.txt'); n=f.readline()
# создание списка данных, хранящего отдельно для каждого запроса: адрес сети и адрес узла
data=[(binip(c)[:mask]+'0'*(32-mask),binip(c)[mask-32::]) for c in f.readlines()]
for c in data:
# забавление новых запросов в списко
zapros[c[0]]=zapros[c[0]]+[c[1]] if c[0] in zapros else [c[1]]
# обрабока данных: подсчет для каждой сети: общего числа узлов, числа уникальных узлов, перевод адреса сети из двоичного кода в десятичный
zapros=[ ( len(zapros[c]), len(set(zapros[c]) ), intip(c) ) for c in zapros]
# ответ
print(*min( [ c for c in zapros if c[0]==max(zapros)[0]] )[::-1][:2])


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 991
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет