← Все комнаты Путь «Защита (код)» →
СложныйЗащита (код) Код Осенний CTF

Слить диапазоны

Прогресс комнаты 0 / 4
Задание 1Введение

Цель: Сливать диапазоны адресов для правил файрвола.

Напишите merge_ranges(ranges). Диапазоны IPv4 вида a.b.c.d-e.f.g.h (начало ≤ конец) слейте: пересекающиеся и соседние (конец + 1 = начало) объединяются. Верните отсортированный список в том же формате.

Задание 2Теория и инструменты

Списки блокировок растут из разных источников и пересекаются. Слияние сокращает число правил.

Классический алгоритм: сортировка по началу и проход с расширением текущего интервала.

Инструменты

  • Python 3 или Node.js
  • Встроенные тесты в редакторе

Больше теории — в разделе «Обучение: Защита (код)».

Задание 3Практика: напишите код

Примеры

Пример 1
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"]
Пример 2
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 скрытых тестов.

solution
Ctrl+Enter — отправить Войдите, чтобы отправить

Пошаговый план — открывайте по одному шагу

  1. 1
    Переведите адреса в числа.

Подсказки — каждая до решения стоит −50 очков

Задание 4Как защититься

Автоматизируйте сборку правил и проверяйте, что слияние не расширило доступ.

Разборы участников

Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.