Sobes.tech
Back to tasks
Junior — Senior
23

Поиск пути между аэропортами с применением обхода в глубину

Companies where asked:

Navio
Get help with live coding in real time with Sobes Copilot
Task condition

Необходимо реализовать функцию, которая определит любую возможную последовательность перелётов от исходного аэропорта до конечного. Функция принимает три аргумента: код аэропорта отправления, код аэропорта назначения и функцию‑поставщик билетов. Результатом работы функции должен быть Promise, который либо разрешается массивом всех промежуточных пунктов (например, ['A','B','C']), либо строкой "no way", если путь недоступен.

Гарантируется, что для заданных пунктов существует либо один единственный маршрут, либо вовсе нет (нет ситуаций с несколькими альтернативными ветвями). При поиске нельзя запускать несколько запросов одновременно, а также запрещено использовать синтаксис async/await и генераторы.

const flights = [
  ['A', 'B'],
  ['A', 'С'],
  ['A', 'D'],
  ['A', 'O'],
  ['D', 'K'],
  ['D', 'L'],
  ['D', 'M'],
  ['M', 'Q'],
  ['M', 'Z'],
  ['O', 'P'],
  ['L', 'G'],
  ['L', 'F'],
  ['F', 'Y'],
];

findPath('A', 'N', fetchFlighting).then(console.log) // Promise.resolve(['A', 'D', 'N'])
findPath('A', 'Q', fetchFlighting).then(console.log) // Promise.resolve(["A", "D", "M", "Q"])
findPath('A', 'W', fetchFlighting).then(console.log) // 'no way'