Логотип YeaHub

Упорядоченный рендер сообщений (Ordered Message Rendering)

3

GoJavaJavaScriptPython

Очередь

Кэширование

Яндекс

Условие:

В чат-приложение сообщения приходят с сервера в произвольном порядке, но должны отображаться (рендериться) строго по возрастанию id, начиная с id = 1, без пропусков.

Каждое сообщение имеет вид:

{ id: number, text: string }

Дана последовательность сообщений в том порядке, в котором они пришли с сервера (может не совпадать с порядком id). Необходимо определить порядок, в котором сообщения были бы фактически отрендерены: сообщение рендерится немедленно при получении, если оно является следующим по очереди (т.е. его id на 1 больше id последнего отрендеренного сообщения), либо буферизуется в ожидании более ранних сообщений. Как только приходит недостающее сообщение, из буфера последовательно "дорендериваются" все сообщения, которые становятся доступны по порядку.

Напишите функцию, которая принимает массив пришедших сообщений (в порядке прихода) и возвращает массив id в том порядке, в котором они были бы отрендерены.


Входные данные:

  • messages — массив объектов { id: number, text: string }, представляющий порядок прихода сообщений с сервера


Выходные данные:

Массив чисел — id сообщений в порядке их рендеринга (всегда возрастающая последовательность 1, 2, 3, ... до количества сообщений).


Ограничения:

  • 1 <= messages.length <= 1000

  • Все id уникальны и образуют непрерывную последовательность от 1 до messages.length

  • text — непустая строка (для теста несущественна)


Пример:

Вход: [{id:1,text:"a"},{id:2,text:"b"},{id:3,text:"c"}]
Выход: [1, 2, 3]

Вход: [{id:3,text:"c"},{id:1,text:"a"},{id:2,text:"b"}]
Выход: [1, 2, 3]

Вход: [{id:2,text:"b"},{id:4,text:"d"},{id:1,text:"a"},{id:3,text:"c"},{id:5,text:"e"}]
Выход: [1, 2, 3, 4, 5]

Loading...