Кодирующие обезьяны использовали все свои бананы, поэтому они заказали 400-килограммовый ящик бананов, которые были доставлены из Бразилии в Лондон.
Чтобы сэкономить деньги, банановый ящик перевозили разными транспортными компаниями, каждая из которых проходила свой путь из Бразилии в Лондон.
Ваш клиент хочет знать точный маршрут, по которому следовал ящик с бананами, и говорит, что он предоставит вам комплект транспортных накладных, которые подробно описывают каждый этап путешествия. Однако клиент не может гарантировать, в каком порядке будут располагаться записи, так как они в случайном порядке.
Ваша задача заключается в следующем:
Напишите реализацию на PHP
, которая может принимать любой набор транспортных накладных и создавать упорядоченный список, детализирующих каждый шаг пути в порядке их посещения.
Транспортные накладные это JSON объект соответствующий схеме:
{
"type": "object",
"properties": {
"startLocation": {"type": "string"},
"endLocation": {"type": "string"},
"transportMethod": {"type": "string"},
"deliveryCompany": {"type": "string"},
}
}
Пример транспортной накладной:
{
"startLocation": "Fazenda São Francisco Citros, Brazil",
"endLocation": "São Paulo–Guarulhos International Airport, Brazil",
"transportMethod": "Truck",
"deliveryCompany": "Correios"
}
Пример упорядоченного списка транспортных накладных:
[
{
"startLocation": "Fazenda São Francisco Citros, Brazil",
"endLocation": "São Paulo–Guarulhos International Airport, Brazil",
"transportMethod": "Truck",
"deliveryCompany": "Correios"
},
{
"startLocation": "São Paulo–Guarulhos International Airport, Brazil",
"endLocation": "Porto International Airport, Portugal",
"transportMethod": "Flight",
"deliveryCompany": "LATAM"
},
{
"startLocation": "Porto International Airport, Portugal",
"endLocation": "Adolfo Suárez Madrid–Barajas Airport, Spain",
"transportMethod": "Van",
"deliveryCompany": "AnyVan"
},
{
"startLocation": "Adolfo Suárez Madrid–Barajas Airport, Spain",
"endLocation": "London Heathrow, UK",
"transportMethod": "Flight",
"deliveryCompany": "DHL"
},
{
"startLocation": "London Heathrow, UK",
"endLocation": "Loft Digital, London, UK",
"transportMethod": "Van",
"deliveryCompany": "City Sprint"
}
]
Написать класс, который будет принимать транспортные накладные в JSON и возвращать готовый сортированный список всех посесещенных пунктов в JSON формате.
Пример формата возвращаемого списока:
[
"From START_LOCATION_1 to END_LOCATION_1 by TRANSPORT_METHOD (DELIVERY_COMPANY)",
"From START_LOCATION_2 to END_LOCATION_2 by TRANSPORT_METHOD (DELIVERY_COMPANY)",
...
]
- Реализация вашего алгоритма сортировки должна работать с любым набором накладных. Можно предположить, что между всеми этапами поездки всегда будет неразрывная цепь.
- Не допускаются сторонние фреймворки, кроме тех, которые требуются для тестирования. Запустите весь код с нуля.
- Вы можете использовать Composer, чтобы подключить библиотеку для тестирования и автозагрузчик
PSR-4
. - Используйте Git для контроля изменений кода.
- Предоставьте файл README.md, содержащий четкие, простые инструкции о том, как выполнить код и тесты.
- Алгоритм должен иметь минимально возможный порядок сложности, которым вы можете управлять - т.е. это не должно занимать неоправданно долгое время или неоправданно большое кол-во ресурсов для завершения.
- Если что-то нуждается в разъяснении, которое не детализировано в инструкции, не паникуйте; просто сделайте предположение и запишите это в файле
README.md
Эта задача призвана дать нам представление о:
- Вашей способности найти подходящее простое решение для данной проблемы.
- Как вы структурируете свой код.
- Ваше понимание
ООП
. - Ваше понимание
UNIT-тестирования
и/илиTDD
. - Ваша способность использовать системы контроля версий(
VCS
). - Эффективность алгоритма сортировки, который вы реализуете.
Мы не ищем решения, разработанного для демонстрации всех ваших знаний PHP. Вместо этого, правильно используйте язык, чтобы четко решить проблему.