alexbuki
@alexbuki
программист js

Не понимаю условия условия задачи. Что необходимо сделать?

На прошлом чемпионате по программированию в Яндексе была задача.
То ли я условия скопировал не правильно, то ли просто не понимаю что нужно сделать.
В условия мы должны брать список городов, до которых можно долететь из заданного. Откуда мы берем данный список?
Помогите разобраться пожалуйста.


B. Авиамаршруты (1 балл)
Вы пишете новый сервис для поиска составных авиабилетов.
Необходимо написать функцию, которая найдет любую цепочку перелетов из пункта вылета в пункт назначения.
Функция принимает на вход пункт вылета, пункт назначения и функцию поиска билетов.
Функция должна вернуть промис, который зарезолвится - массивом из всех остановок
(например, [’A’, ’B’, ’C’]); - или строкой ’no way’, если до пункта назначения добраться нельзя.
Гарантируется, что составной авиабилет или отсутствует или единственно возможный (нет ромбовидных перелетов).
Нельзя искать несколько билетов параллельно. Нельзя использовать async/await и генераторы.
Интерфейс функции поиска билетов:

// Возвращает список городов, до которых можно долететь из заданного.
function fetchFlights(departurePoint: string): Promise;
Решение необходимо предоставить в виде CommonJS-модуля:
module.exports = function (start, end, fetchFlights) {
    // Your code here.
    // ...
    return Promise.resolve(’no way’);
    return Promise.resolve([’A’, ’C’, ’D+’]);
};

Вердикт RE также означает, что отправленное решение неверно.

Формат ввода
PIC
Необходимо построить маршрут из пункта A в пункт D+.

Формат вывода
[’A’, ’B’, ’D+’]
1) рейсы для А: В и C;

fetchFlights(’A’) => [’B’, ’C’]
2) рейсы для B: D+;

fetchFlights(’B’) => [’D+’]
3) рейсы для C: D+;

fetchFlights(’C’) => []
4) составной авиабилет найден [’A’, ’B’, ’D+’]
  • Вопрос задан
  • 306 просмотров
Решения вопроса 1
@dimoff66
Кратко о себе: Я есть
module.exports = function (start, end, fetchFlights) {
    let fetchPromise, route
    
    const routes = [[start]]
    const last = arr => arr[arr.length - 1]

    // функция обработки ответа
    const responseExecution = response => {
      let result
      // Если респонс включает конечную точку, 
      // то составляем маршрут из последних элементов routes
      if (response.includes(end)) {
        route = [...routes.map(list => last(list)), end]
      } else if (response.length) {
        // если респонс содержит города, добавляем его в конец списка
        routes.push(response)
      } else { // если массив пустой
        // если это был последний город на текущем уровне графа
        // удаляем весь уровень и т.д. в цикле
        while (routes.length && last(routes).length === 1) {
          routes.pop()
        }
        // если массив routes опустел, значит вариантов нет
        if (!routes.length) {
          route = 'no way'
        } else { // удаляем последний город последнего уровня
          last(routes).pop()
        }
      }

      // если маршрут еще не определен, добавляем then и запрашиваем
      // полеты для последнего города последнего уровня
      if (!route) {
        fetchPromise = fetchPromise.then(responseExecution)
        return fetchFlights(last(last(routes)))
      }
    }

    // стартуем промис получения полетов
    fetchPromise = fetchFlights(start).then(responseExecution)

    // Возвращаем промис, в котором запускаем интервал и резолвим,
    // когда route не пустой
    return new Promise((resolve, reject) => {
      const id = setInterval(() => {
        if (route) {
          clearInterval(id)
          resolve(route)
        }
      }, 1000)
    })
  }


fetchFlights для проверки

const fetchFlights = city => {
    const flights = [
      ['A', 'B'],
      ['A', 'C'],
      ['A', 'D'],
      ['D', 'K'],
      ['D', 'L'],
      ['D', 'M'],
      ['M', 'Q'],
      ['M', 'Z'],
      ['L', 'G'],
      ['L', 'F'],
      ['F', 'Y']
    ]

    return Promise.resolve(flights.filter(item => item[0] === city).map(item => item[1]))
  }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы