Advertisement
Guest User

Untitled

a guest
May 24th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.61 KB | None | 0 0
  1. B. Торрент-клиент
  2. Вы решили написать свой торрент-клиент. Его особенностью будет то, что с его помощью можно передавать только текст.
  3. Торрент-клиент почти готов, осталось самое главное: собрать исходный текст из кусков, на которые он был разбит для передачи.
  4. Напишите функцию, которая дождётся загрузки всех кусков текста и соберёт из них исходную.
  5. Функция принимает на вход объект с двумя полями: chunkCount и emitter, и возвращает промис, содержащий либо исходный текст, либо ошибку в виде строки заданного формата.
  6. chunkCount — количество кусков, на которое был разбит текст.
  7. У каждого куска текста есть уникальный идентификатор и время отправки. Куски с более поздним временем отправки располагаются дальше от начала текста.
  8. emitter — объект, с помощью которого можно получать загруженные куски текста. Куски текста могут приходить с произвольными временными задержками. Порядок кусков может быть любым.
  9. Если один и тот же кусок текста будет получен дважды до того, как загрузка успешно завершилась, функция должна выдать ошибку "Duplicate: <id>"(с id куска текста на месте <id>).
  10. Как только все куски текста были получены, необходимо соединить их в одну строку и вернуть эту строку с помощью промиса. Если у двух кусков времена отправки совпадают, порядок этих кусков в возвращённой строке может быть любым.
  11. Если в течение секунды передача не завершилась, функция должна выдать ошибку "Timed out".
  12.  
  13. Формат ввода
  14. {
  15. chunkCount: 3,
  16. emitter: {on: (fn) => {
  17. fn({id: 5314, data: ’The Good, ’, timestamp: new Date(’2019-01-01’)});
  18. fn({id: 1543, data: ’d the Ugly’, timestamp: new Date(’2019-01-03’)});
  19. fn({id: 2494, data: ’the Bad an’, timestamp: new Date(’2019-01-02’)});
  20. }}
  21. }
  22. Формат вывода
  23. module.exports = function () {
  24. return Promise.resolve(’The Good, the Bad and the Ugly’);
  25. }
  26. Примечания
  27. Входные данные соответствуют такому интерфейсу на TypeScript:
  28. interface Input {
  29. chunkCount: number;
  30. emitter: Emitter;
  31. }
  32.  
  33. interface Emitter {
  34. on: (callback: (chunk: Chunk) => void) => void;
  35. }
  36.  
  37. interface Chunk {
  38. id: number;
  39. timestamp: Date;
  40. data: string;
  41. }
  42. Решение необходимо предоставить в виде CommonJS-модуль:
  43.  
  44. module.exports = function ({chunkCount, emitter}) {
  45. // возвращает Promise
  46. };
  47. Вердикт RE также означает, что отправленное решение неверно.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement