Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- B. Торрент-клиент
- Вы решили написать свой торрент-клиент. Его особенностью будет то, что с его помощью можно передавать только текст.
- Торрент-клиент почти готов, осталось самое главное: собрать исходный текст из кусков, на которые он был разбит для передачи.
- Напишите функцию, которая дождётся загрузки всех кусков текста и соберёт из них исходную.
- Функция принимает на вход объект с двумя полями: chunkCount и emitter, и возвращает промис, содержащий либо исходный текст, либо ошибку в виде строки заданного формата.
- chunkCount — количество кусков, на которое был разбит текст.
- У каждого куска текста есть уникальный идентификатор и время отправки. Куски с более поздним временем отправки располагаются дальше от начала текста.
- emitter — объект, с помощью которого можно получать загруженные куски текста. Куски текста могут приходить с произвольными временными задержками. Порядок кусков может быть любым.
- Если один и тот же кусок текста будет получен дважды до того, как загрузка успешно завершилась, функция должна выдать ошибку "Duplicate: <id>"(с id куска текста на месте <id>).
- Как только все куски текста были получены, необходимо соединить их в одну строку и вернуть эту строку с помощью промиса. Если у двух кусков времена отправки совпадают, порядок этих кусков в возвращённой строке может быть любым.
- Если в течение секунды передача не завершилась, функция должна выдать ошибку "Timed out".
- Формат ввода
- {
- chunkCount: 3,
- emitter: {on: (fn) => {
- fn({id: 5314, data: ’The Good, ’, timestamp: new Date(’2019-01-01’)});
- fn({id: 1543, data: ’d the Ugly’, timestamp: new Date(’2019-01-03’)});
- fn({id: 2494, data: ’the Bad an’, timestamp: new Date(’2019-01-02’)});
- }}
- }
- Формат вывода
- module.exports = function () {
- return Promise.resolve(’The Good, the Bad and the Ugly’);
- }
- Примечания
- Входные данные соответствуют такому интерфейсу на TypeScript:
- interface Input {
- chunkCount: number;
- emitter: Emitter;
- }
- interface Emitter {
- on: (callback: (chunk: Chunk) => void) => void;
- }
- interface Chunk {
- id: number;
- timestamp: Date;
- data: string;
- }
- Решение необходимо предоставить в виде CommonJS-модуль:
- module.exports = function ({chunkCount, emitter}) {
- // возвращает Promise
- };
- Вердикт RE также означает, что отправленное решение неверно.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement