Ctrl K

Наименьшее число блоков адресов

Средняя
IPv4-адрес — это 32-битное число без знака, записанное как четыре байта в десятичном виде через точку, например "10.0.0.6". Блок адресов записывается как "адрес/k", где k от 0 до 32. Он покрывает все адреса, у которых первые k бит совпадают с первыми k битами указанного адреса, то есть ровно 2^(32-k) адресов. Например, "10.0.0.8/30" покрывает адреса с 10.0.0.8 по 10.0.0.11. Настраивая брандмауэр, нужно открыть ровно count адресов подряд, начиная с first_ip, — не больше и не меньше. Подберите для этого как можно меньше блоков и верните их записи. Ни один блок не должен захватывать адреса вне нужного диапазона, и блоки не должны пересекаться. В каждой записи адрес — это наименьший адрес блока. Блоки можно вернуть в любом порядке.
Пример 1
first_ip='10.0.0.6', count=6 → ['10.0.0.6/31', '10.0.0.8/30']

Нужны адреса с 10.0.0.6 по 10.0.0.11. Блок /31 закрывает .6 и .7, блок /30 — с .8 по .11. Меньше двух блоков не получится.

Пример 2
first_ip='192.168.0.0', count=256 → ['192.168.0.0/24']

Начало выровнено и количество — степень двойки, так что хватает одного блока /24.

Пример 3
first_ip='172.16.5.255', count=3 → ['172.16.5.255/32', '172.16.6.0/31']
Ограничения
  • first_ip — корректный IPv4-адрес вида "a.b.c.d", 0 ≤ a, b, c, d ≤ 255, без ведущих нулей
  • 1 ≤ count ≤ 2²⁰
  • Все адреса диапазона существуют: first_ip + count - 1 не выходит за 255.255.255.255
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПовторяющиеся участки гена СредняяСлова без общих букв СредняяВсе сокращения слова СредняяВсе написания кода СредняяПалиндром после пары правок Средняя
загружаем Python…
Вход
first_ip='10.0.0.6', count=6
Ожидается
['10.0.0.6/31', '10.0.0.8/30']

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 135 тестов на сервере, включая скрытые.