Говорят, что путешествия позволяют человеку открывать новые горизонты и вдохновляться. Кеша, как истинный фотограф, не может провести выходные без парочки красивых фотографий. В этот раз темой фоток стали городские пейзажи Урала. Но путешствия даже на свой машине это достаточно дорого, и Кеше хочется узнать цену поездки в тот или иной город заранее.
Помогите написать Инокентию программу - навигатор, который будет искать самый кратчайший путь между городами A и B и считать стоимость потраченного для путешествия бензина. Не забывайте и о том, что чтобы передвигаться между городами, необходимо заправляться в каждой промежуточной точке маршрута, включая стартовую. При этом стоит учитывать, что дороги между точками в одну сторону и в обратно не всегда равны, а также могут отсутствовать вовсе.
Вам необходимо реализовать класс Navigator
, который в конструкторе принимает массив объектов с информацией о городах:
name
- Название городаpetrolPrice
- Стоимость литра бензина в этом городеpaths
- Массив городов где ключ этоname
других городов, а значение это протяженность дороги
Также в классе должен быть реализован метод buildPath
, принимающий два названия города(город A и город B) и расход автомобиля в соотношении л/км. Метод должен возвращать объект, содержащий поля:
distance
- Кратчайшее расстояние от города A до города Bsum
- Сумма, которая будет затрачена на бензин или пораждать ошибку, если построить маршрут не удается в следствии получения некорректных входных данных или отсутствия пути из города A в город B.
Пример работы:
const cities = [
{
name: "Yekaterinburg",
petrolPrice: 50.0,
paths: {
Chelyabinsk: 200,
Tumen: 350,
},
},
{
name: "Perm",
petrolPrice: 46.0,
paths: {
Yekaterinburg: 300,
Chelyabinsk: 500,
Tumen: 650,
},
},
{
name: "Chelyabinsk",
petrolPrice: 42.45,
paths: {
Yekaterinburg: 400,
Perm: 700,
Tumen: 748,
},
},
{
name: "Tumen",
petrolPrice: 60.45,
paths: {
Yekaterinburg: 9,
Perm: 780,
Chelyabinsk: 130,
},
},
];
const nav = new Navigator(cities);
nav.buildPath("Yekaterinburg", "Perm", 0.06);
/*
{
distance: 900,
sum: 2382.9,
},
*/
Полезные ссылки: