/pymetro

route planner for Moscow Metro

Primary LanguagePython

Задание для групп БЛК-151/152 бакалавриата ВШЭ по курсу теории алгоритмов

pymetro: route planner for Moscow Metro

Пакет предоставляет класс Router, вычисляющий кратчайший по времени путь между двумя станциями Московского метро.

Установка

Рекомендуется установка в виртуальное окружение. Режим editable (флаг -e) позволяет тестировать код сразу после внесения изменений, без дополнительной переустановки:

$ git clone git@github.com:<username>/pymetro.git
$ cd pymetro
$ python3 -m venv .env
$ . .env/bin/activate
$ pip install -e . 

Использование

In [1]: from pymetro import *

In [2]: source, target = Station(7), Station(46)

In [3]: source, target
Out[3]: (<Station: Красные Ворота (line 1)>, <Station: Бауманская (line 3)>)

In [4]: r = Router().make_route(source, target)

In [5]: r.path
Out[5]:
[<Station: Красные Ворота (line 1)>,
 <Station: Чистые пруды (line 1)>,
 <Station: Сретенский бульвар (line 10)>,
 <Station: Чкаловская (line 10)>,
 <Station: Курская (line 3)>,
 <Station: Бауманская (line 3)>]

In [6]: r.time
Out[6]: 795

Пояснения

Данные для построение графа метро находятся в файле data.py.

Вам необходимо реализовать класс Router из файла router.py. Остальной код следует оставить без изменений.

Соблюдайте типы, указанные в аннотациях к функциям: make_route принимает объекты класса Station, а возвращает объект класса Route.

Кратчайший путь следует находить алгоритмом Дейкстры. Для его реализации понадобится очередь с изменяемым приоритетом. Её можно взять из модуля heapdict (он уже прописан в зависимостях).

Приём задания

Для проверки задания необходимо прислать pull-request (PR) в этот репозиторий. При успешной сдаче PR закрывается без мёржа, оценка будет сообщаться в комментариях.