
рджреВрд╕рд░реЗ рджрд┐рди, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЪреИрдореНрдкрд┐рдпрдирд╢рд┐рдк рдХреЗ рд╡рд┐рдЬреЗрддрд╛, рдЬреЛ рд╢реБрд░реБрдЖрддреА рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рдкреБрд░рд╕реНрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдмреБрд▓рд╛рдпрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рджреВрд╕рд░реЗ рд╢реАрд░реНрд╖ 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) {
рдЖрд░рдИ рдлреИрд╕рд▓реЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдЧрд▓рдд рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрдгрдп
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}) {
рдЖрд░рдИ рдлреИрд╕рд▓реЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдЧрд▓рдд рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрдгрдп
- рднрд░реА рд╣реБрдИ рдЪрдВрдХреНрд╕ рдХреЛ рдПрдХ
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-
рдирд┐рд░реНрдгрдп
class BinaryTreeNode { static create(...items) {
рдбреАред 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;
рдЯрд┐рдХрдЯ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 10 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдпрд╣ рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╕рднреА рдЯрд┐рдХрдЯреЛрдВ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреАрдорддреЗрдВ рд╣реИрдВ, рдФрд░ рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рджрд┐рдиреЛрдВ рдореЗрдВ рдПрдХ рдЯрд┐рдХрдЯ рд╡реИрдз рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рджрд┐рди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЙрд╕рдХреА рд▓рд╛рдЧрдд рдХрдо рд╣реЛрддреА рд╣реИред
рд╕рдорд╛рдзрд╛рди рдХреЛ рдХреЙрдордирдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
module.exports = function (days, tickets) {
рдЖрд░рдИ рдлреИрд╕рд▓реЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рдкреНрд░рд╕реНрддреБрдд рд╕рдорд╛рдзрд╛рди рдЧрд▓рдд рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдкрдЙрджрд╛рд╣рд░рдгрдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рджрд┐рди рдкреЗрдЯреНрдпрд╛ рдХреЛ рдПрдХ рджрд┐рд╡рд╕реАрдп рдЯрд┐рдХрдЯ рдЦрд░реАрджрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЪреМрдереЗ рджрд┐рди рд╕рд╛рдд рджрд┐рд╡рд╕реАрдп рд╣реИ, рдмреАрд╕рд╡реЗрдВ рджрд┐рди рдПрдХ рджрд┐рди рдлрд┐рд░ рд╕реЗред
рдРрд╕реЗ рдЯрд┐рдХрдЯреЛрдВ рдХреА рдХреБрд▓ рд▓рд╛рдЧрдд рд╕рдмрд╕реЗ рдХрдо рд╕рдВрднрд╡ рд╣реЛрдЧреА:
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; };
рдмреИрдХрдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдПрдХ рд▓рд┐рдВрдХ рдпрд╣рд╛рдБ рджреА рдЧрдИ рд╣реИ ред