рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЪреИрдореНрдкрд┐рдпрдирд╢рд┐рдк: рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдп

рджреВрд╕рд░реЗ рджрд┐рди, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЪреИрдореНрдкрд┐рдпрдирд╢рд┐рдк рдХреЗ рд╡рд┐рдЬреЗрддрд╛, рдЬреЛ рд╢реБрд░реБрдЖрддреА рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рдкреБрд░рд╕реНрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдмреБрд▓рд╛рдпрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рджреВрд╕рд░реЗ рд╢реАрд░реНрд╖ 20 рд╕реЗ рд╕рднреА рджрд┐рд╢рд╛рдУрдВ рдХреЗ рдпрд╛рдВрдбреЗрдХреНрд╕ рдореЙрд╕реНрдХреЛ рдХрд╛рд░реНрдпрд╛рд▓рдп рдХреЛ рдмреБрд▓рд╛рдпрд╛ред рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдмрдзрд╛рдИ рдЬреЛ рдлрд╛рдЗрдирд▓ рдореЗрдВ рдкрд╣реБрдВрдЪрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред

рдЗрд╕ рдмреАрдЪ, рд╣рдордиреЗ рдЙрди рдЪреИрдореНрдкрд┐рдпрдирд╢рд┐рдк рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рддреИрдпрд╛рд░ рдХреА, рдЬреЛ рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдереЗред рдпреЗ рдпреЛрдЧреНрдпрддрд╛ рдЪрд░рдг рд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВред рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЪреИрдВрдкрд┐рдпрдирд╢рд┐рдк рдЪрд╛рд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЖрдпреЛрдЬрд┐рдд рдХреА рдЧрдИ рдереА: рдмреИрдХрдПрдВрдб, рдлреНрд░рдВрдЯреЗрдВрдб, рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдФрд░ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ред

A. рдерд░реНрдорд╛рдореАрдЯрд░


рд╢рд░реНрдд


рдирд╛рд╡рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХрдИ рдиреЗ рдХрд╛рд░ рдорд╛рд░реНрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп "рдерд░реНрдорд╛рдореАрдЯрд░" рджреЗрдЦрд╛ред рдпрд╣ рдПрдХ рдмрд╣реБ-рд░рдВрдЧреАрди рд╕реАрдзреА рд░реЗрдЦрд╛ рд╣реИ, рдЬреЛ рдорд╛рд░реНрдЧ рдкрд░ рд╕рдбрд╝рдХреЛрдВ рдХреА рднреАрдбрд╝ рдХреЛ рджрд┐рдЦрд╛рддреА рд╣реИред рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдХреНрд░реАрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП "рдерд░реНрдорд╛рдореАрдЯрд░" рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдПрдбрд╛рдкреНрдЯ рдХрд░рддрд╛ рд╣реИред

рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдХреЛ рд▓рдВрдмрд╛рдИ length рдФрд░ рд╕реНрдХреНрд░реАрди рдЖрдХрд╛рд░ width ( length тЙе width , length тЙе width ) рдХреЗ рд░рдВрдЧреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреА рдЧрдИ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдерд░реНрдорд╛рдореАрдЯрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред GREEN , YELLOW рдФрд░ RED рд░рдВрдЧ рдХреНрд░рдорд╢рдГ рдХрдо, рдордзреНрдпрдо рдФрд░ рдЙрдЪреНрдЪ рднрд╛рд░ рдХреЗ рдЕрдиреБрд░реВрдк рдереЗред рд░рдВрдЧ рдпрд╛рддрд╛рдпрд╛рдд рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рддреБрд▓рдиреАрдп рд╣реИрдВ: GREEN < YELLOW < RED ред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддрддреНрд╡, рдкрд╣рд▓реЗ рддрддреНрд╡ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, length / width рдХреА рдХреНрд░рдорд┐рдХ рдЕрд╕рдорд╛рдирддрд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИ (рд╕рдВрдЦреНрдпрд╛ рд╣рдореЗрд╢рд╛ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реЛрдЧреА)ред рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдкреНрд░рдХрд╛рд░ рдореЗрдВ, рд╕рдбрд╝рдХреЛрдВ рдХреА рднреАрдбрд╝ рдХреА рдмрдврд╝рддреА рдбрд┐рдЧреНрд░реА рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд░рдВрдЧреЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдордзреНрдп рд░рдВрдЧ рдЪреБрдиреЗрдВ рдФрд░ рдкреВрд░реЗ рд╕реЗрдЯ рдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВред рд╕рдо рд▓рдВрдмрд╛рдИ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "рдирд┐рдЪрд▓рд╛ рдорд╛рдзреНрдпрд┐рдХрд╛" рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ ( n рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рдЖрджреЗрд╢рд┐рдд рдкрдВрдХреНрддрд┐ рдореЗрдВ рддрддреНрд╡ n/2 )ред рдкрд░рд┐рдгрд╛рдо рд▓рдВрдмрд╛рдИ width рдХреЗ рд░рдВрдЧреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

рд╕рдорд╛рдзрд╛рди рдХреЛ рдХреЙрдордирдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 module.exports = function (segments, width) { // Your code here. }; 

рдЖрд░рдИ рдлреИрд╕рд▓реЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдЧрд▓рдд рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдирд┐рд╖реНрдХрд░реНрд╖
 const segments = ['GREEN', 'GREEN', 'RED', 'GREEN', 'YELLOW', 'RED', 'GREEN', 'YELLOW', 'RED', 'YELLOW']; const width = 5; 
['GREEN', 'GREEN', 'YELLOW', 'GREEN', 'YELLOW']

рдирд┐рд░реНрдгрдп


1. length / width рдХреЗ рдЦрдВрдбреЛрдВ рдореЗрдВ рдЦрдВрдбреЛрдВ рдХреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рд░рдгреА рдХреЛ рддреЛрдбрд╝реЗрдВред
2. рдкреНрд░рддреНрдпреЗрдХ рдЦрдВрдб рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд╛рдзреНрдп рд░рдВрдЧ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдФрд░ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд░рдВрдЧ рдЬреЛрдбрд╝реЗрдВред

solution.js
 module.exports = function solution(segments, width) { const blockSize = segments.length / width; const result = []; for (let i = 0; i < width; i++) { result.push(getMedian(segments.slice(i * blockSize, (i + 1) * blockSize))); } return result; }; function getMedian(array) { const map = { GREEN: 1, YELLOW: 2, RED: 3 }; return array.sort((a, b) => map[a] - map[b])[Math.floor((array.length - 1) / 2)]; } 

B. рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ


рд╢рд░реНрдд


рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдХреЗрд╡рд▓ рдкрд╛рда рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред

рдЯреЛрд░реЗрдВрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рд╣реИ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдмрдиреА рд╣реБрдИ рд╣реИ: рд╕реНрд░реЛрдд рдкрд╛рда рдХреЛ рдЙрди рдЯреБрдХрдбрд╝реЛрдВ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ, рдЬреЛ рд╕реНрд░реЛрдд рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рда рдХреЗ рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ред

рдлрд╝рдВрдХреНрд╢рди рджреЛ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ: chunkCount рдФрд░ emitter , рдФрд░ рдПрдХ рд╡рд╛рджрд╛ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╛ рддреЛ рд╕реНрд░реЛрдд рдЯреЗрдХреНрд╕реНрдЯ рдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рд╛рд░реВрдк рдХреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред

chunkCount - рдЯреБрдХрдбрд╝реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдкрд╛рда рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдкрд╛рда рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рд╕рдордп рдХреЗ рд╕рд╛рде рдЯреБрдХрдбрд╝реЗ рдкрд╛рда рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рджреВрд░ рд╕реНрдерд┐рдд рд╣реИрдВред

emitter - рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдЖрдк рдкрд╛рда рдХреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдЯреБрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╛рда рдХреЗ рдЯреБрдХрдбрд╝реЗ рдордирдорд╛рдиреЗ рд╕рдордп рдХреА рджреЗрд░реА рдХреЗ рд╕рд╛рде рдЖ рд╕рдХрддреЗ рд╣реИрдВред рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдХреНрд░рдо рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рдкрд╛рда рдХрд╛ рдПрдХ рд╣реА рдЯреБрдХрдбрд╝рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджреЛ рдмрд╛рд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ "Duplicate: <id>" (рдкрд╛рда рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдЖрдИрдбреА рдЖрдИрдбреА рдХреЗ рд╕реНрдерд╛рди рдкрд░) рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ "Duplicate: <id>" рдЪрд╛рд╣рд┐рдПред

рдПрдХ рдмрд╛рд░ рдкрд╛рда рдХреЗ рд╕рднреА рдЯреБрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдФрд░ рдПрдХ рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрджрд┐ рджреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╕рдорд╛рди рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рддреЛ рд▓реМрдЯреЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЗрди рдЯреБрдХрдбрд╝реЛрдВ рдХрд╛ рдХреНрд░рдо рдХреЛрдИ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рднреАрддрд░ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ "Timed out" рддреНрд░реБрдЯрд┐ "Timed out" рдЪрд╛рд╣рд┐рдПред

рдЗрдирдкреБрдЯ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ
(рдЯреАрдПрд╕ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╡рд░рдг ред)

 interface Input { chunkCount: number; emitter: Emitter; } interface Emitter { on: (callback: (chunk: Chunk) => void) => void; } interface Chunk { id: number; timestamp: Date; data: string; } 


рд╕рдорд╛рдзрд╛рди рдХреЛ рдХреЙрдордирдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 module.exports = function ({chunkCount, emitter}) { //  Promise }; 

рдЖрд░рдИ рдлреИрд╕рд▓реЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдЧрд▓рдд рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк
рдЙрджрд╛рд╣рд░рдг
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдирд┐рд╖реНрдХрд░реНрд╖
 { 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')}); }} } 
Resolved with "The Good, the Bad and the Ugly"
 { chunkCount: 1, emitter: {on: (fn) => { fn({id: 0, data: 'hello', timestamp: new Date('2019-01-01')}); fn({id: 0, data: 'world', timestamp: new Date('2019-01-02')}); }} } 
Rejected with "Duplicate id: 0"
 { chunkCount: 2, emitter: {on: (fn) => {}} } 
Rejected with "Timed out"

рдирд┐рд░реНрдгрдп


  • рднрд░реА рд╣реБрдИ рдЪрдВрдХреНрд╕ рдХреЛ рдПрдХ chunk рд╡рд╕реНрддреБ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред
  • рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо id рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╡рд╛рджрд╛ рд░рджреНрдж рдХрд░ рджреЗрдВред
  • рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ рдФрд░ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВред
  • рдЗрд╕рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░, рдЖрдкрдХреЛ 1 рдПрд╕ рдХрд╛ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


solution.js
 module.exports = function ({chunkCount, emitter: {on}}) { return new Promise((resolve, reject) => { const chunks = {}; let chunksDownloaded = 0; on(({id, data, timestamp}) => { if (typeof chunks[id] !== 'undefined') { reject(`Duplicate: ${id}`); } else { chunks[id] = {data, timestamp}; chunksDownloaded += 1; if (chunksDownloaded === chunkCount) { const result = Object.values(chunks) .sort((a, b) => a.timestamp - b.timestamp) .map(({data}) => data) .join(''); resolve(result); } } }); setTimeout(() => { reject('Timed out'); }, 1000); }); }; 

рд╕реАред рдмрд╛рдЗрдирд░реА рдЯреНрд░реА


рд╢рд░реНрдд


рдбреЗрд╡рд▓рдкрд░ рдЧреНрд░рд┐рд╢рд╛ рдХреЛ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреЗрдбрд╝ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рд╛рд░ рдХреЛ рдЦрд░рд╛рдм рд░реВрдк рд╕реЗ рд╕рдордЭрд╛ рдФрд░ рдХрдИ рдЧрд▓рддрд┐рдпрд╛рдВ рдХреАрдВред рдЙрд╕реЗ рдЦреЛрдЬрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред

task.js рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдвреВрдВрдврдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдмрд╛рдЗрдирд░реА рдЯреНрд░реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреНрд▓рд╛рд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕:

 type Data = number; type ITraverseCallback = (data: Data) => void; interface IBinaryTreeNode { data: Data; left: IBinaryTreeNode | null; right: IBinaryTreeNode | null; static create(...items: Data[]): IBinaryTreeNode; constructor(data: Data); insert(data: Data): this; remove(data: Data): IBinaryTreeNode | null; search(data: Data): IBinaryTreeNode | null; inorder(callback: ITraverseCallback): this; preorder(callback: ITraverseCallback): this; postorder(callback: ITraverseCallback): this; } 

рдиреЛрдЯ : JSDoc рдХреЛ рд╕рд╣реА рдорд╛рдиреЗрдВред

рдЖрд░рдИ рдлреИрд╕рд▓реЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдЧрд▓рдд рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк
рдЗрдирдкреБрдЯ рдЙрджрд╛рд╣рд░рдг :
 let output = ''; BinaryTreeNode.create(10, 5, 13, 7, 20, 12).inorder((data) => { output += data + '-'; }); 

рдирд┐рд╖реНрдХрд░реНрд╖ :
 5-7-10-12-13-20- 

рдирд┐рд░реНрдгрдп


 /** * @typedef Data * @type {Number} */ class BinaryTreeNode { /** * @param {...Data} items * @returns {BinaryTreeNode} */ static create(...items) { // e - . const root = new BinaryTreeNode(items[0]); //  return   . //  .slice(1),     . return items.slice(1).reduce((node, data) => node.insert(data), root); } /** * @param {Data} data */ constructor(data) { /** * @type {Data} */ this.data = data; //    . /** * @type {BinaryTreeNode | null} */ this.left = null; /** * @type {BinaryTreeNode | null} */ this.right = null; } /** *    . *    ,      . * * @param {Date} data * @returns {BinaryTreeNode} */ insert(data) { //    . if (data < this.data) { if (this.left === null) { this.left = new BinaryTreeNode(data); } else { this.left.insert(data); } } else { if (this.right === null) { this.right = new BinaryTreeNode(data); } else { this.right.insert(data); } } //    ,   . return this; } /** *     . *   ,   . * * @param {Data} data * @returns {BinaryTreeNode | null} */ remove(data) { //     {}. //    . if (data < this.data) { //     `this.left`. this.left = this.left && this.left.remove(data); } else if (data > this.data) { //     `this.right`. this.right = this.right && this.right.remove(data); } else { if (this.left === null && this.right === null) { return null; } if (this.left === null) { return this.right; } else if (this.right === null) { return this.left; } const aux = findMinNode(this.right); this.data = aux.data; this.right = this.right.remove(aux.data); } //    ,   . return this; } /** *     . * * @param {Data} data * @returns {BinaryTreeNode | null} */ search(data) { //    . if (data < this.data) { //     `this.left`. return this.left && this.left.search(data); } if (data > this.data) { //     `this.right`. return this.right && this.right.search(data); } //  ,     ,    `null`. if (data === this.data) { return this; } return null; } /** *    ,           . *     . * * @param {Function} callback * @returns {BinaryTreeNode} */ inorder(callback) { if (this.left !== null) { this.left.inorder(callback); } callback(this.data); if (this.right !== null) { this.right.inorder(callback); } //    ,   . return this; } /** *   ,           . * * @param {Function} callback * @returns {BinaryTreeNode} */ preorder(callback) { callback(this.data); if (this.left !== null) { //       . this.left.preorder(callback); } if (this.right !== null) { this.right.preorder(callback); } //    ,   . return this; } /** *   ,            . * * @param {Function} callback * @returns {BinaryTreeNode} */ postorder(callback) { if (this.left !== null) { this.left.postorder(callback); } if (this.right !== null) { //       . this.right.postorder(callback); } //   ,     . callback(this.data); return this; } } /** *   ,   . * * @param {BinaryTreeNode} node * @returns {BinaryTreeNode} */ function findMinNode(node) { //       . //    true  false. if (node.left === null) { return node; } else { return findMinNode(node.left); } } module.exports = BinaryTreeNode; 

рдбреАред Yandex.Maps рд▓реЛрдЧреЛ


рд╢рд░реНрдд


рдбрд┐рдЬрд╛рдЗрдирд░ рдиреЗ Yandex.Maps рд▓реЛрдЧреЛ (x5 рд╕реНрдХреЗрд▓) рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ:



рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд╢реБрджреНрдз рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдПрдХ рдПрдЪрдЯреАрдПрдордПрд▓ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдВред рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ рд▓реЛрдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рднреА рдкреГрд╖реНрдарднреВрдорд┐ рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛред

рдЖрдк рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ data:uri рдорд╛рдзреНрдпрдо рд╕реЗ data:uri )ред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк

- рд╕реЗрдВрдЯрд░ рд╕рд░реНрдХрд▓ рд░рдВрдЧ: #fff
- рдмрд╛рд╣рд░реА рд╕рд░реНрдХрд▓ рдХрд╛ рд░рдВрдЧ: # f33
- "рдкреИрд░" рдХрд╛ рд░рдВрдЧ: # рдИрдкрд░

рд╕рдорд╛рдзрд╛рди рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдкрддреНрд░ рдХреЗ HTML рдкреГрд╖реНрда рдкрд░ solution.css рд░реВрдк рдореЗрдВ рдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдПрдЧреА:

 <!DOCTYPE html> <html> <head> <style> body { margin: 0; } </style> <link rel="stylesheet" href="solution.css"> </head> <body> <div></div> </body> </html> 

рдорд╣рддреНрд╡рдкреВрд░реНрдг : рд▓реЛрдЧреЛ рдХреЛ рдкреГрд╖реНрда рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕реЗ рдмрд╛рд░реАрдХреА рд╕реЗ рджрдмрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг Google Chrome 69 рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред

рд╣рдо рдкрд┐рдХреНрд╕реЗрд▓-рдкреВрд░реНрдг рд▓реЗрдЖрдЙрдЯ рдЬреИрд╕реЗ рдХрд┐ PerfectPixel рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред

рдирд┐рд░реНрдгрдп


 //          . div { position: absolute; width: 6px; height: 6px; border: 5px solid #f33; border-radius: 8px; background: #fff; } //     ┬л┬╗ . //    ,      9 . div::after { content: ''; position: absolute; top: 6px; left: 2px; border-top: 15px solid #e00000; border-right: 7px solid transparent; transform: rotate(9deg); z-index: -1; } 


рдИред рдмреНрд░рд┐рдХ рдореЗрд╢


рд╢рд░реНрдд


рдбреЗрд╡рд▓рдкрд░ рдЗрд╡рд╛рди рдиреЗ рдкреГрд╖реНрда рдХреА рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдЙрд╕рдиреЗ рдЕрдкрдиреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рддреЛрдбрд╝ рджрд┐рдпрд╛ред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбрд┐рдЬрд╛рдЗрди:

рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдореВрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдЕрдиреБрд░реВрдк рд▓реБрдХ рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдорд╣рддреНрд╡рдкреВрд░реНрдг : рд╕реВрдЪреА рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдЧреНрд░рд┐рдб рдХреЛ рдЗрд╕реА рддрд░рд╣ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж refactoring: ./solution.css ред

рд╕реБрдзрд╛рд░ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ рдЕрджреНрдпрддрди рд╕реАрдПрд╕рдПрд╕ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд solution.css рд░реВрдк рдореЗрдВ рдЬреБрдбрд╝реА рд╣реЛрдЧреАред HTML рдкреГрд╖реНрда рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ ред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк
рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг Google Chrome 69 рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдлрд╝реЙрдиреНрдЯ рдкрд░рд┐рд╡рд╛рд░ рдФрд░ рдЕрдиреНрдп рдлрд╝реЙрдиреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ, рдлрд╝реЙрдиреНрдЯ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реНрдерд┐рддрд┐ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЛ рдЙрдмрдВрдЯреВ рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╣рдо рдкрд┐рдХреНрд╕реЗрд▓-рдкреВрд░реНрдг рд▓реЗрдЖрдЙрдЯ рдЬреИрд╕реЗ рдХрд┐ PerfectPixel рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред

рдирд┐рд░реНрдгрдп


рдкрд░рд┐рд╡рд░реНрддрди рдХреЗрд╡рд▓ред рдЪрдпрдирдХрд░реНрддрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╡рдВрд╢ рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред

 :root { --color-gray: #4e4d4d; --color-main: #000000; --width-layout: 900px; --paddingx5: 50px; --paddingx4: 40px; --paddingx3: 30px; --paddingx2: 20px; --padding: 10px; --font-size-largex2: 40px; --font-size-large: 20px; --font-size-medium: 16px; --font-size-small: 14px; } body { margin: 0 auto; padding: var(--paddingx5) var(--paddingx4); font: var(--font-size-small)/1.4 arialregular; color: var(--color-main); width: var(--width-layout); } .hgroup { margin-bottom: var(--paddingx4); text-align: center; } .hgroup__title { font-size: var(--font-size-largex2); font-weight: normal; margin: 0; } .hgroup__desc { font-size: var(--font-size-large); font-weight: normal; color: var(--color-gray); margin: 0; } .events { list-style: none; margin: 0; padding: 0; //    . //      . columns: 3; column-gap: var(--paddingx4); } .events__item { //    . break-inside: avoid; //  margin     . padding-bottom: var(--paddingx4); } .card { text-decoration: none; color: var(--color-main); display: block; } .card:hover .card__title { text-decoration: underline; } .card__image { width: 100%; display: block; height: 100px; background: var(--color-gray); margin-bottom: var(--padding); } .card__title { margin: 0 0 var(--padding); } .card__summary { margin: 0; color: var(--color-gray); } 

рдПрдлред рд╕рдмрд╡реЗ рдХреА рд╕рд╡рд╛рд░реА


рд╢рд░реНрдд


рджреЗрд╡реЛрдкрд┐рдпрд╛ рдкреЗрдЯреНрдпрд╛ рд╣реИред рдХрд╛рдо рдкрд░, рдЙрд╕реЗ рдЕрдЧрд▓реЗ 100 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдбреНрдпреВрдЯреА рдкрд░ рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред рдкреЗрдЯреНрдпрд╛ рдХреЛ рдореЗрдЯреНрд░реЛ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЛ рдорд┐рд▓рддрд╛ рд╣реИред рд╕рдмрд╡реЗ рдЯрд┐рдХрдЯ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдереЗ рдЬреЛ рдЙрди рдкрд░ рдкрд╣рд▓реА рдпрд╛рддреНрд░рд╛ рд╕реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реИрдз рд╣реИрдВред рдЕрдм рдЯрд┐рдХрдЯ рд╡реИрдз рд╣реИ, рдкреНрд░рддрд┐ рджрд┐рди рдХрдо рд▓рд╛рдЧрддред рдкреЗрдЯреАрдПрдо рдХреЛ рдкреИрд╕реЗ рдмрдЪрд╛рдиреЗ рдФрд░ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдХрд░реНрддрд╡реНрдпреЛрдВ рдХреА рд╕рдордп-рд╕реАрдорд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рддреАрди рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рдЯрд┐рдХрдЯ рдЦрд░реАрджрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рддрд╛рдХрд┐ рдЙрдирдХреА рдХреБрд▓ рд▓рд╛рдЧрдд рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рд╣реЛред рдФрд░ рдкреЗрдЯреАрдпрд╛ рдЕрдкрдиреЗ рд╕рд╛рде рдХрдИ рдЯрд┐рдХрдЯ рд▓реЗ рдЬрд╛рдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдПрдХ рд╣реА рдиреНрдпреВрдирддрдо рд▓рд╛рдЧрдд рдХреЗ рд╕рд╛рде рдХрдИ рдЯрд┐рдХрдЯ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рддреЛ рдкреЗрдЯреНрдпрд╛ рдХреЛ рдХрдо рдЯрд┐рдХрдЯреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рдРрд╕реЗ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ (рд╕рдорд╛рди рдиреНрдпреВрдирддрдо рд▓рд╛рдЧрдд рдФрд░ рдЯрд┐рдХрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде), рддреЛ рдкреАрдЯ рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ред

рдЖрдкрдХреЛ getCheapestTickets(days, tickets) рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛, рдЬреЛ getCheapestTickets(days, tickets) рдХреЗ рдбреНрдпреВрдЯреА рд╢реЗрдбреНрдпреВрд▓ ( days ) рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЯрд┐рдХрдЯ рд╡рд┐рдХрд▓реНрдк ( tickets ) рдХреЛ рдПрдХ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЯрд┐рдХрдЯреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреЗрддрд╛ рд╣реИ (рдЯрд┐рдХрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЗрдирдкреБрдЯ рд╕рд░рдгреА рд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ) рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдЦрд░реАрджрдирд╛ рд╣реЛрдЧрд╛ред рдкреАрдЯред

рдкреЗрдЯреА рдХреА рдбреНрдпреВрдЯреА рдЕрдиреБрд╕реВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдХреНрд░рдордмрджреНрдз рд╕рд░рдгреА (1 рд╕реЗ 100 рд╕рдорд╛рд╡реЗрд╢реА) рдХреЗ рд░реВрдк рдореЗрдВ рджреА рдЧрдИ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд░реНрддрд╡реНрдп рджрд┐рди рдХреА рдХреНрд░рдорд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ:

 [2, 5, 10, 45] //     , ,        . 

рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдХрдЯ рдХреЛ рдирд┐рдореНрди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 interface Ticket { duration: number; //  ,           ,    ( 1  100 ) cost: number; //   ( 1  100 ) } 

рдЯрд┐рдХрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 10 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╕рднреА рдЯрд┐рдХрдЯреЛрдВ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреАрдорддреЗрдВ рд╣реИрдВ, рдФрд░ рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рджрд┐рдиреЛрдВ рдореЗрдВ рдПрдХ рдЯрд┐рдХрдЯ рд╡реИрдз рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рджрд┐рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрд╕рдХреА рд▓рд╛рдЧрдд рдХрдо рд╣реЛрддреА рд╣реИред

рд╕рдорд╛рдзрд╛рди рдХреЛ рдХреЙрдордирдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 module.exports = function (days, tickets) { // Your code here. }; 

рдЖрд░рдИ рдлреИрд╕рд▓реЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдЧрд▓рдд рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк
рдЙрджрд╛рд╣рд░рдг

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдирд┐рд╖реНрдХрд░реНрд╖
 const days = [1, 2, 4, 6, 7, 8, 9, 10, 20]; const tickets = [ { cost: 3, duration: 1 }, { cost: 10, duration: 7 }, { cost: 20, duration: 30 } ]; 
[0, 0, 1]

рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рджрд┐рди рдкреЗрдЯреНрдпрд╛ рдХреЛ рдПрдХ рджрд┐рд╡рд╕реАрдп рдЯрд┐рдХрдЯ рдЦрд░реАрджрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЪреМрдереЗ рджрд┐рди рд╕рд╛рдд рджрд┐рд╡рд╕реАрдп рд╣реИ, рдмреАрд╕рд╡реЗрдВ рджрд┐рди рдПрдХ рджрд┐рди рдлрд┐рд░ рд╕реЗред

рдРрд╕реЗ рдЯрд┐рдХрдЯреЛрдВ рдХреА рдХреБрд▓ рд▓рд╛рдЧрдд рд╕рдмрд╕реЗ рдХрдо рд╕рдВрднрд╡ рд╣реЛрдЧреА: 19 ред

рдирд┐рд░реНрдгрдп


рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ:

1. рдбреНрдпреВрдЯреА рдкреЗрдЯрд┐рдЯ рдХрд╛ рдкрд╣рд▓рд╛ рджрд┐рди рд▓реЗрдВред
2. рдЗрд╕ рджрд┐рди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдХрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдЯрд┐рдХрдЯ рдХреА рд▓рд╛рдЧрдд рдФрд░ рдЗрд╕ рдЯрд┐рдХрдЯ рдХреА рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐ рдХреЗ рдмрд╛рдж рдбреНрдпреВрдЯреА рдХреЗ рджрд┐рди рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╕рдорд╛рдзрд╛рди рдХреА рд▓рд╛рдЧрдд рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред рджреВрд╕рд░реЗ рдкрдж рдХреА рдЧрдгрдирд╛ рдЗрд╕реА рддрд░рд╣ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред
3. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЯрд┐рдХрдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЕрдЧрд░ рдРрд╕реЗ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред
4. рдЕрдВрддрд░рд┐рдо рджрд┐рдиреЛрдВ рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рд╡рд┐рд╢реЗрд╖ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

solution.js
 module.exports = function (days, tickets) { if (days.length === 0 || tickets.length === 0) { return []; } tickets = tickets .map((ticket, idx) => ({ ...ticket, idx })) .sort((a, b) => a.duration - b.duration); const daysSolutions = new Map(); function getDaySolution(idx) { if (daysSolutions.has(idx)) { return daysSolutions.get(idx); } const solution = { totalCost: Number.POSITIVE_INFINITY, totalTickets: Number.POSITIVE_INFINITY, ticketToBuy: null, next: null }; for (let i = 0, j = idx; i < tickets.length && j < days.length; i++) { while (j < days.length && days[j] < days[idx] + tickets[i].duration) { j++; } const nextDaySolution = j < days.length ? getDaySolution(j) : null; let totalCost = tickets[i].cost; let totalTickets = 1; if (nextDaySolution) { totalCost += nextDaySolution.totalCost; totalTickets += nextDaySolution.totalTickets; } if ( totalCost < solution.totalCost || (totalCost === solution.totalCost && totalTickets < solution.totalTickets) ) { solution.totalCost = totalCost; solution.totalTickets = totalTickets; solution.ticketToBuy = tickets[i].idx; solution.next = nextDaySolution; } } daysSolutions.set(idx, solution); return solution; } let solution = getDaySolution(0); const res = []; while (solution) { res.push(solution.ticketToBuy); solution = solution.next; } return res; }; 



рдмреИрдХрдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд▓рд┐рдВрдХ рдпрд╣рд╛рдБ рджреА рдЧрдИ рд╣реИ ред

Source: https://habr.com/ru/post/hi460139/


All Articles