paths / python-delivery-routing
учебный путь · python

Служба доставки «Вектор»

  • Python
  • Средний
  • 5 модулей
  • 25 задач
  • Premium

Соберите мозг городской доставки: граф районов и поиск маршрутов (BFS и Дейкстра руками, без heapq), очередь заказов с приоритетами, окна доставки, жадная загрузка курьеров и план дня методом ближайшего соседа.

AI-ассистент ведёт подсказками, но решение не выдаёт
intro

Что тебя ждёт в этом пути

// Что ты построишь

Службу доставки «Вектор» — логистическую систему, которая строит карту города в виде графа, ищет быстрейшие маршруты алгоритмом Дейкстры, расставляет приоритеты заказов, распределяет их между курьерами по весу сумки и собирает финальный план смены с расписанием прибытий. Всё с нуля на Python, без сторонних библиотек.

// Для кого

Подойдёт, если ты уверенно пишешь функции и словари на Python и хочешь впервые разобраться с графами и алгоритмами поиска на реальной задаче. Теория алгоритмов не нужна — все концепции объясняются по ходу работы.

// Чему научишься
  • Граф в виде карты смежности и обход в ширину (BFS)
  • Алгоритм Дейкстры для поиска кратчайшего пути вручную, без heapq
  • Восстановление пути и обход с запрещёнными вершинами
  • Приоритетные очереди и жадная загрузка с ограничением по весу
  • Полный перебор пар для задачи о рюкзаке
  • Временны́е окна доставки и детерминированный маршрут ближайшего соседа
curriculum

Задачи пути — 5 модулей, 25 задач

Каждый модуль — навык. Решаешь задачи по порядку, и к финалу из них собирается рабочий результат.

25 задач · 5 модулей
1.1
Карта смежности
Превратите список дорог в карту смежности города — фундамент всех маршрутов «Вектора»
1.2
Дороги района
Посчитайте, сколько дорог выходит из района, — степень вершины решает, где ставить хаб
1.3
Соседи в радиусе
Найдите районы, до которых курьер доедет по прямой дороге за max_minutes — фильтр по весу ребра
1.4
Доедет ли курьер
Проверьте достижимость района обходом в ширину — первый BFS по карте «Вектора»
1.5
Зона покрытия
Соберите все районы, достижимые со склада, — полный обход компоненты связности
2.1
Карта времени в пути
Соберите взвешенную карту города: район → отсортированный список пар (сосед, минуты) — фундамент поиска маршрутов
2.2
Перегоны между районами
Посчитайте минимальное число перегонов между районами — BFS уровнями по карте «Вектора»
2.3
Быстрейшее время доставки
Дейкстра руками, без heapq: найдите минимальное время доставки между районами по взвешенной карте
2.4
Маршрут в объезд
Проверьте, доедет ли курьер при перекрытом районе — BFS, который обходит запретную вершину
2.5
Быстрейший маршрут
Дейкстра с восстановлением пути: верните курьеру не минуты, а сам список районов быстрейшего маршрута
3.1
Очередь по приоритету
Отсортируйте заказы каноническим порядком «Вектора»: приоритет по убыванию, при равенстве — id по возрастанию
3.2
Следующий заказ
Выдайте курьеру лучший заказ по каноническому порядку и верните остальные новым списком в исходном порядке
3.3
Открытые окна доставки
Отберите заказы, чьё окно доставки открыто прямо сейчас — обе границы включительно, порядок входа сохраняется
3.4
Просроченные заказы
Соберите заказы, чьё окно уже закрылось — строгое сравнение to_min < now и отчёт, отсортированный по id
3.5
План выдачи на смену
Соберите план выдачи: жадно снимайте лучший заказ с пула, пока он не опустеет, — список id в порядке выдачи
4.1
Вес сумки курьера
Посчитайте суммарный вес партии заказов — первый шаг к честной загрузке термосумки «Вектора»
4.2
Влезет ли в сумку
Проверьте, выдержит ли термосумка партию заказов — граница «ровно лимит» включительна
4.3
Жадная загрузка сумки
Наполните сумку по каноническому порядку: не влезший заказ пропускается, а не останавливает погрузку
4.4
Лучшая пара заказов
Полный перебор пар: максимум суммарного приоритета в лимит веса, при равенстве — лексикографически меньшая пара
4.5
Два курьера на смене
Разделите партию между двумя курьерами: каждый заказ — менее загруженному, при равных весах — первому
5.1
Крайнее время выезда
Вычислите последний момент, когда курьер ещё может выехать из депо и успеть в окно доставки
5.2
Расписание прибытий
Рассчитайте минуту прибытия курьера в каждый район маршрута, накапливая минуты прямых дорог
5.3
Доставки в окно
Сверьте расписание прибытий с окнами заказов и посчитайте, сколько клиентов получили курьера вовремя
5.4
Отчёт за день
Соберите сводку смены для диспетчерской: доставлено в окно, мимо окна и общий вес заказов
5.5
План дня капстоун
Соберите финальный план смены: загрузку заказов и детерминированный маршрут ближайшего соседа
Путь входит в Koddo Premium Открой все премиум-пути, AI-ассистента без лимитов и daily challenge. от 490 ₽ / мес
koddo start python-delivery-routing

Готов начать этот путь?

Зарегистрируйся — откроем путь прямо на первой задаче. Без установки и настройки, всё в браузере.