299. Быстрая пятёрка

Не решаласьСредняя

Брайан, Миа, Хан, Жизель и Доминик участвуют в уличной гонке.

Правила соревнования простые. Маршрут пролегает через N контрольных точек, пронумерованных числами от 1 до N (N – целое положительное число). Контрольная точка номер N является финишем. Чтобы победить в соревновании, каждому из участников нужно пройти все контрольные точки по порядку. Пропуск контрольных точек, а также нарушение порядка их прохождения считается жульничеством и ведёт к дисквалификации участника.

Чтобы точно определить победителей, а также убедиться в честности участников соревнования, в автомобили установлены навигационные чипы, которые сигнализируют о прохождении через контрольные точки. На маршруте присутствуют тоннели, поэтому сигнал от чипов может временно теряться, однако вблизи контрольных точек доставка сигнала гарантируется.

Вам дан доступ к сигналам навигационных чипов. Ваша задача – написать программу, которая определит первых трёх нежульничавших участников, дошедших до финиша. Программа будет запущена прямо во время соревнования и будет получать сигналы в реальном времени.

Гарантируется, что хотя бы три участника не будут жульничать. Гарантируется, что, достигнув финиша, участник больше никуда не едет. Участники не посещают одну контрольную точку дважды.

Формат ввода

Решение нужно реализовать в виде функции winners, которую предлагается экспортировать следующим образом:

module.exports = function winners(wait, pushResult, STREET_RACERS, N) {
  // your code
};

Вам не потребуется читать что-то из файлов или стандартного ввода – интерфейс взаимодействия с навигационными чипами, посылки результата, а также все необходимые данные будут переданы параметрами в функцию winners.

Первым параметром в winners будет предоставлена функция wait(streetRacer, checkpoint, callback), которую вы можете использовать для ожидания прохождения указанным участником указанной контрольной точки. Функция принимает следующие параметры:

  1. streetRacer – имя участника, строка.
  2. checkpoint – номер контрольной точки, число от 1 до N включительно.
  3. callback – функция, передав которую, вы можете реагировать на прохождение участником контрольной точки, а также потерю соеднинения. Функция будет вызвана в двух случаях: а) в момент прохождения участником streetRacer контрольной точки с номером checkpoint – в этом случае она будет вызвана без параметров; б) в момент потери соединения с навигационным чипом участника streetRacer – тогда первым параметром будет передана строка "connection lost".

Вторым параметром в функцию winners будет передана функция pushResult, с помощью которой нужно сообщать результат гонки (об этом ниже).

Третьим параметром будет передан массив имён участников гонки STREET_RACERS: ["Brian", "Mia", "Han", "Gisele", "Dominic"].

Четвёртым параметром будет передан номер финальной контрольной точки N, целое положительное число.

Формат вывода

Функция в качестве результата должна сообщить массив из имён первых трёх участников, дошедших до финиша, не жульничая. Под словом "сообщить" имеется в виду вызов функции pushResult, которая передаётся в winners вторым параметром.

Пример: pushResult(["Gisele", "Dominic", "Brian"])

Примечание

Важно: Будьте осторожны с повторными вызовами wait(streetRacer, checkpoint, callback). До прохождения указанным участником указанной контольной точки wait с этими параметрами можно вызвать сколько угодно раз – сигнал будет передан во все вызовы через вызов callback. Однако в вызовы wait, совершенные после прохождения участником streetRacer контрольной точки checkpoint, повторно никакой сигнал передан не будет!

Здесь вы можете найти часть тестов, которыми проверяются решения этой задачи: https://github.com/ya-contest-2021/fast-five.

Ограничения

Ограничение времени

1 с

Ограничение памяти

64 МБ

Теги

JavaScript Node.js 12
Нужно войти, чтобы отправить решение.Войти