проект · Python

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

Соберёшь планировщик доставки: поиск маршрутов, приоритеты заказов и распределение курьеров. Получишь план смены со временем прибытия.

Для старта: Уверенно пишешь функции и работаешь со словарями Python; графы разберёшь по ходу

  • Python
  • 5 модулей
  • 25 задач
  • 5 задач бесплатно

После регистрации откроется программа этого пути.

результаты практики

что освоишь на практике

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

что получится

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

Для кого

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

что ещё отработаешь

  • Приоритетные очереди и жадная загрузка с ограничением по весу
  • Полный перебор пар для задачи о рюкзаке
  • Временны́е окна доставки и детерминированный маршрут ближайшего соседа
программа

программа пути

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

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
План дня сборка проекта
Соберите финальный план смены: загрузку заказов и детерминированный маршрут ближайшего соседа
доступ к полной программе Платные модули этого пути входят в Premium. Условия подписки можно посмотреть на странице тарифов. от 490 ₽ / мес посмотреть тарифы первые 5 задач — бесплатно, без карты
первый шаг в этом пути

начни с задачи «Карта смежности»

После регистрации откроется путь «Служба доставки «Вектор»». Выбери модуль «Граф города»: редактор и проверка доступны на странице задачи.

5 задач бесплатно

начать бесплатно

После регистрации откроется программа этого пути.

другие пути на этом языке