Автор | Сообщение |
|
Отправлено: 11.07.22 14:48. Заголовок: 26.5318_Про маски и ip
В задании у меня совпала первая часть ответа, а вторая нет: ## uses school; function NetMask(ip:string):string; //255.255.224.0 //19 begin var b:=ip.Split('.'); var oct3:= bin(b[2].ToInteger); //3-й октет ip while oct3.Length<>8 do oct3:='0'+oct3; var tmp:=''; var s:=oct3[1:4]; // --> 111 if (s='000') then tmp:='00000000'; if (s='001') then tmp:='00100000'; if (s='010') then tmp:='01000000'; if (s='011') then tmp:='01100000'; if (s='100') then tmp:='10000000'; if (s='101') then tmp:='10100000'; if (s='110') then tmp:='11000000'; if (s='111') then tmp:='11100000'; Result:=dec(bin(b[0].ToInteger),2)+'.'+ dec(bin(b[1].ToInteger),2)+'.'+ dec(tmp,2)+'.'+'0'; end; var s:=ReadAllLines('26-88.txt'); var D:=new Dictionary<string,integer>; for var i:=1 to s.count-1 do begin var m:=NetMask(s[ i]); if d.ContainsKey(m) then d[m]:=d[m]+1 else d[m]:=1; end; d.OrderByDescending(x->x.Value).Take(10).Print(NewLine); У меня получилось: 28130320 26 22 vs 26 ?
|
|
|
Ответов - 5
[только новые]
|
|
|
| Администратор
|
Сообщение: 3648
|
|
Отправлено: 09.08.22 13:30. Заголовок: Как вы учитываете то..
Как вы учитываете то, что один узел может отправить несколько запросов? В этом случае его нужно посчитать только 1 раз.
|
|
|
|
Отправлено: 19.08.22 13:48. Заголовок: Количество запросов vs количествоузлов.
Спасибо за подсказку. Просто вывел уникальные значения и ответ совпал: 28.130.32.92 28.130.32.94 28.130.33.80 28.130.34.86 28.130.35.90 28.130.35.90 повтор 28.130.36.94 28.130.37.84 28.130.40.89 28.130.40.94 28.130.40.97 28.130.40.99 28.130.42.92 28.130.43.85 28.130.43.85 повтор 28.130.43.85 повтор 28.130.43.85 повтор 28.130.44.85 28.130.44.86 28.130.45.87 28.130.47.91 28.130.47.95 28.130.48.80 28.130.48.88 28.130.49.90 28.130.49.95
|
|
|
|
Отправлено: 20.08.22 14:46. Заголовок: Хм... А у меня прогр..
Хм... А у меня программа, представленная ниже: with open('26-88.txt', 'r') as f: addrs = [list(map(int, (f.readline().strip().split('.')))) for i in range(int(f.readline()))] addrs = sorted(addrs) addrs_subnets = [] addrs_subnets.append([addrs[0][0], addrs[0][1], (224 & addrs[0][2]), 0]) for n in range(1, len(addrs)): if addrs[n] != addrs[n - 1]: addrs_subnets.append([addrs[n][0], addrs[n][1], (224 & addrs[n][2]), 0]) ans = '' k = 0 mx = 0 for n in range(len(addrs_subnets)-1): if addrs_subnets[n] == addrs_subnets[n + 1]: k += 1 else: k += 1 if k > mx: mx = k ans = str(addrs_subnets[n][0]) + str(addrs_subnets[n][1]) + str(addrs_subnets[n][2]) + \ str(addrs_subnets[n][3]) + ' ' + str(mx) k = 0 print(ans) выдала такой ответ: 36138320 24 Сетей с таким количеством узлов несколько, программа выбрала наименьший. Проверяю. Адреса узлов, в найденной подсети 36.138.32.0: 36.138.32.87 36.138.32.93 36.138.32.97 36.138.35.83 36.138.35.95 36.138.36.80 36.138.37.80 36.138.37.99 36.138.37.99 повтор 36.138.38.85 36.138.39.94 36.138.40.85 36.138.41.93 36.138.42.83 36.138.42.87 36.138.42.87 повтор 36.138.42.97 36.138.44.85 36.138.44.88 36.138.44.93 36.138.44.95 36.138.46.87 36.138.46.98 36.138.48.83 36.138.48.87 36.138.48.98 Всего 26 адресов. Убираем повторяющиеся, получается 24 P.S. Проверил, на всякий случай, -- все найденные IP-адреса присутствуют в исходном файле.
|
|
|
|
Отправлено: 21.08.22 16:31. Заголовок: и у меня тоже ответ:..
и у меня тоже ответ: 36138320 24 f = open('26-88.txt') n = int(f.readline()) a = {} m = 224 s = set() # для отсечения повторяющихся узлов for i in range(n): p = f.readline() if p not in s: s.add(p) x1, x2, x3, x4 = p.split('.') x3 = str(m & int(x3)) x = x1 + x2 + x3 + '0' a[ x] = a.get(x, 0) + 1 k = 0 adres = '99999999' for i in a: if a[ i] > k: k = a[ i] adres = i elif a[ i] == k and i < adres: adres = i print(adres, k)
|
|
|
|
| Администратор
|
Сообщение: 3676
|
|
Отправлено: 30.08.22 18:23. Заголовок: smekalin пишет: выда..
smekalin пишет: цитата: | выдала такой ответ: 36138320 24 Сетей с таким количеством узлов несколько, программа выбрала наименьший. |
|
Согласно условию, сравнение идет по количеству ЗАПРОСОВ. Следующие сети выдали по 26 запросов: 40.133.32.0 26 36.138.32.0 26 28.130.32.0 26 Минимальный из этих адресов - последний. В этой сети запросы приходили от 22 разных узлов, там есть 4 дубля. Ответ верный.
|
|
|
|