491. Escape

Не решаласьСложная

Малоизвестный путешественник Оливер Моур начал своё одиночное путешествие к отдалённому острову в Тихом океане, чтобы изолироваться и найти вдохновение для своего нового писательского проекта Escape. Однако приключение принимает неожиданный оборот, когда лодка Моура разбивается и он оказывается на необитаемом острове без возможности связи. Оливер понимает, что его единственный шанс на спасение — отправить сигнал SOS с помощью найденных на острове старых передатчиков, которые могут передать сигнал до ближайшего корабля или береговой станции.

Каждый передатчик обладает только световым прибором, который может передать сообщение, закодированное в азбуку Морзе. Подключившись к одному из маяков, Оливер обнаружил интерфейс управления, который представляет собой всего лишь один файл. Световые сигналы управляются с помощью кнопок. Чтобы включить сигнал на маяке, нужно одновременно нажать кнопки F и D, чтобы выключить — B и U. После полной передачи сообщения нужно вернуть устройство управления в исходное состояние.

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

Если на передатчике что-то пошло не так, нужно заново воспроизвести на нём слово (не всю фразу, а только слово), в момент воспроизведения которого что-то сломалось.

Формат ввода

На вход в обработчик будут приходить сообщения, состоящие только из слов на английском языке и пробелов, без знаков препинания и прочих символов.

Вам необходимо реализовать функцию, которая первым аргументом будет получать WebSocket, вторым аргументом — массив из передатчиков, третьим — настройки для пауз при передаче через азбуку Морзе:

  • короткий сигнал — включение на 0,5 сек.;
  • длинный сигнал — включение на 1 сек.;
  • пауза между словами — 2 сек.;
  • пауза между символами азбуки Морзе — 0,2 сек.

В onmessage веб-сокета будут приходить сообщения, которые нужно воспроизвести с помощью API передатчиков.

Примечание

Для тестирования решения скачивайте приложенный файл playground.zip. В файле src/solution.js можно писать решение и визуализировать состояние передатчиков.

В ответ необходимо отправить содержимое файла solution.js.

Ограничения

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

10 с

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

64 МБ

Теги

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