Слить диапазоны
Задание 1Введение
Цель: Сливать диапазоны адресов для правил файрвола.
Напишите merge_ranges(ranges). Диапазоны IPv4 вида a.b.c.d-e.f.g.h (начало ≤ конец) слейте: пересекающиеся и соседние (конец + 1 = начало) объединяются. Верните отсортированный список в том же формате.
Задание 2Теория и инструменты
Списки блокировок растут из разных источников и пересекаются. Слияние сокращает число правил.
Классический алгоритм: сортировка по началу и проход с расширением текущего интервала.
Инструменты
- Python 3 или Node.js
- Встроенные тесты в редакторе
Больше теории — в разделе «Обучение: Защита (код)».
Задание 3Практика: напишите код
Примеры
merge_ranges(["10.0.0.0-10.0.0.255", "10.0.1.0-10.0.1.255"]) → ["10.0.0.0-10.0.1.255"]
merge_ranges(["1.1.1.1-1.1.1.5", "1.1.1.3-1.1.1.9", "1.1.1.20-1.1.1.20"]) → ["1.1.1.1-1.1.1.9", "1.1.1.20-1.1.1.20"]
Ещё 4 скрытых тестов.
Пошаговый план — открывайте по одному шагу
- 1Переведите адреса в числа.
- 2Отсортируйте интервалы по началу.
- 3Сливайте, если начало ≤ конец предыдущего + 1.
Подсказки — каждая до решения стоит −50 очков
Задание 4Как защититься
Автоматизируйте сборку правил и проверяйте, что слияние не расширило доступ.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.