На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.
Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.
Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».
Отправлено: 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])))
Отправлено: 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))
Отправлено: 06.01.24 10:29. Заголовок: Почему табуляция не ..
цитата:
Почему табуляция не сохраняется?
см. выше в желтой рамке:
цитата:
Программы "заворачивайте" в тэг [ pre2]...[ /pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[ i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.
Отправлено: 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])
Все даты в формате GMT
3 час. Хитов сегодня: 2895
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет