Перейти к содержимому

## Условие

misc · generalVK / ВК (ВКонтакте) - 12 кв 2025не решено
Сервис получает сообщения об обновлении документов в формате:
message Document {
string Url = 1; // Уникальный идентификатор документа
uint64 PubDate = 2; // Заявленное время публикации
uint64 FetchTime = 3; // Время получения обновления (версия)
string Text = 4; // Текст документа
uint64 FirstFetchTime = 5; // Требуется заполнить
}
Документы могут поступать в произвольном порядке (не в том, как они обновлялись), также возможно дублирование отдельных сообщений.
Необходимо на выходе формировать такие же сообщения, но с исправленными отдельными полями по следующим правилам (все нижеуказанное - для группы документов с совпадающим полем Url):
- Поле Text и FetchTime должны быть такими, какими были в документе с наибольшим FetchTime, полученным на данный момент;
- Поле PubDate должно быть таким, каким было у сообщения с наименьшим FetchTime;
- Поле FirstFetchTime должно быть равно минимальному значению FetchTime.
Т. e. в каждый момент времени мы берем PubDate и FirstFetchTime от самой первой из полученных на данный момент версий (если отсортировать их по FetchTime), а Text - от самой последней.
Интерфейс в коде можно реализовать таким:
type Processor interface {
Process(doc *Document) (*Document, error)
}
Данный код будет работать в сервисе, читающим входные сообщения (Kafka или подобное), и записывающим результат также в очередь. Если Process возвращает Null - то в очередь ничего не пишется.

Источник: VK / ВК (ВКонтакте) - 1 · 2 кв 2025

← ## Условие · Все задачи · Разное · ## Условие →