рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде, рд╣рдо 2018 рдореЗрдВ Yandex.Blitz рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреВрд░реА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рднрд╛рдЧ рд▓реЗрдиреЗ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдерд╛ рдХрд┐ рд╣рдо рдЙрддреНрдкрд╛рджрди рдХреЗ рдХрд░реАрдм рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдп рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╕реАрдорд╛рдВрдд рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдереАред рдЖрдЬ рд╣рдо 12 рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ: рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ 6 рдХреЛ рдХреНрд╡рд╛рд▓рд┐рдлрд┐рдХреЗрд╢рди рд░рд╛рдЙрдВрдб рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдлрд╝рд╛рдЗрдирд▓ рдореЗрдВ 7тАУ12 рдХреЛ рд╕рдорд╕реНрдпрд╛рдПрдВред рд╣рдордиреЗ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХрд┐ рдХреИрд╕реЗ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдмрдиреАрдВ, рд╣рдордиреЗ рдХрд┐рди рдХреМрд╢рд▓реЛрдВ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ред рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреА рд░реБрдЪрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдЯрд╛рд╕реНрдХ 1
рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдп 20 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рд╡рд╛рд░реНрдо-рдЕрдк рд╣реЛрдирд╛ рдерд╛, рдФрд░ рд╣рдордиреЗ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдЗрд╕реЗ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рдорджрдж рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдХрд╛рд░реНрдп рдХреЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдПрдХ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЕрдВрдХреЛрдВ рдореЗрдВ рдПрдХ рд╡рд┐рдШрдЯрди рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЕрдВрддрд┐рдо рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рдкреЛрд╕реНрдЯ рдСрдлрд┐рд╕ред
рд╢рд░реНрдд
Jopan-14-53 рдЧреНрд░рд╣ рдкрд░, рд╕реНрдерд╛рдиреАрдп рд▓реЛрдЧ рдПрдХ-рджреВрд╕рд░реЗ рдХреЛ рдкрддреНрд░ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрдмреВрддрд░ рд░реЛрдмреЛрдЯ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡реЗ рдкрддреЗ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реИрдВред рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдкрддреНрд░реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдФрд░ рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрдирд╛ рд╕рд┐рдЦрд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдкрддреЗ рдХреЗ рдореВрд▓ рднрд╛рдЧ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреНрд╖реЗрддреНрд░, рдирдЧрд░рдкрд╛рд▓рд┐рдХрд╛, рдирд╛рдо рдФрд░ рдкрддреЗ рдХрд╛ рдЙрдкрдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИред рдирдЧрд░рдкрд╛рд▓рд┐рдХрд╛ рдХреЛ рдХрд╛рдЙрдВрдЯрд┐рдпреЛрдВ рдФрд░ рдбрд╛рдХрдШрд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рднреА рднрд╛рдЧреЛрдВ рдХреЛ рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,ред
рдХреНрд╖реЗрддреНрд░реЛрдВ, рдирдЧрд░ рдкрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рдЬрд┐рд▓реЛрдВ рдХреЗ рдирд╛рдо рд╢рдмреНрдж рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдореЗрдВ рдкрд╣рд▓рд╛ рдЕрдХреНрд╖рд░ рдмрдбрд╝рд╛ рд╣реИ, рдмрд╛рдХреА рдЫреЛрдЯреЗ рд╣реИрдВред рджреЛ-рд╢рдмреНрдж рдирд╛рдо рд╕рдВрднрд╡ рд╣реИрдВ, рдПрдХ рд╕реНрдерд╛рди рдпрд╛ рдПрдХ рд╢реВрдиреНрдп рдЪрд┐рд╣реНрди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдореЗрдВ рддреАрди рд╕реЗ рдЖрда рдЕрдХреНрд╖рд░ AZред
рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рдХреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ 6 рдЙрдВрдЧрд▓рд┐рдпрд╛рдВ рд╣реИрдВ, рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЬрд┐рдВрджрдЧреА рдореЗрдВ рдЧреНрд░рд╣рдгреА рдкреНрд░рдгрд╛рд▓реАред рд╕рдВрдЦреНрдпрд╛ реж- реп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ резреж рдФрд░ резрез рд╕рдВрдХреЗрдд
~
рдФрд░ тАУ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд░рдЪрдирд╛ рдореЗрдВ рдкреЛрд╕реНрдЯ рдСрдлрд┐рд╕ рдирдВрдмрд░ рдореЗрдВ рдпрд╛ рддреЛ 3 рдЕрдВрдХ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╛ 4 рд╢реВрдиреНрдп рд╕реЗ 2 рдЕрдВрдХреЛрдВ рдХреЗ 2 рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг:
300
,
44-99
ред
рдХрднреА-рдХрднреА рдирд┐рд╡рд╛рд╕реА рдорд╛рдВрдЧ рдкрд░ рдирдЧрд░рдкрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкрддреНрд░ рднреЗрдЬрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдИ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ: рдХреЗрд╡рд▓ рдирдЧрд░рдкрд╛рд▓рд┐рдХрд╛ рдФрд░ рдкрддреЗ рд╡рд╛рд▓реЗ рдХрд╛ рдирд╛рдоред
рдпрд╣ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЧреНрд░рд╣ рдкрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдЫрд╣ рдирд╛рдо рдФрд░ рдиреМ рдЙрдкрдирд╛рдо рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд╛рдо: рд╢реЛрдм, рд░рдпреЛрдм, рдореЛрдм, рдЬрд┐рдпрд╛рдВрдЧ, рд░рдпрд╛рди, рдореИрдиреНрд╕ред рдЙрдкрдирд╛рдо: рдерд╛рдиреЗрджрд╛рд░, рд░рд┐рдпреЛ, рдореЛ, рдЬрд╝рд┐рдпрд╛, рд░рд╛рдпрд╛, рдорд╛, рд╕реНрдпреВ, рд░рдпреВ, рдореБред рдЗрд╕ рдЧреНрд░рд╣ рдХреЗ рдирд┐рд╡рд╛рд╕реА рд╕рдкрдиреЗ рджреЗрдЦрдиреЗ рд╡рд╛рд▓реЗ рдирд╣реАрдВ рд╣реИрдВред
рдкрджрдЪреНрдЫреЗрдж
рдкрддреЗ рдХреЗ рдореВрд▓ рднрд╛рдЧ рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдХреНрд╖реЗрддреНрд░, рдирдЧрд░рдкрд╛рд▓рд┐рдХрд╛, рдирд╛рдо рдФрд░ рдкрддреЗ рдХрд╛ рдЙрдкрдирд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИред рдирдЧрд░рдкрд╛рд▓рд┐рдХрд╛ рдХреЛ рдХрд╛рдЙрдВрдЯрд┐рдпреЛрдВ рдФрд░ рдбрд╛рдХрдШрд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рднреА рднрд╛рдЧреЛрдВ рдХреЛ рдПрдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,ред
рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рд╕реЗ рд╣рдо рд╕реАрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд╖реЗрддреНрд░, рдирдЧрд░рдкрд╛рд▓рд┐рдХрд╛, рдЬрд┐рд▓рд╛, рдбрд╛рдХрдШрд░, рдирд╛рдо рдФрд░ рдЙрдкрдирд╛рдо рдХреЛ рдХреИрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдХреНрд░рдо рдореЗрдВ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреНрд╖реЗрддреНрд░реЛрдВ, рдирдЧрд░ рдкрд╛рд▓рд┐рдХрд╛рдУрдВ рдФрд░ рдЬрд┐рд▓реЛрдВ рдХреЗ рдирд╛рдо рд╢рдмреНрдж рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдореЗрдВ рдкрд╣рд▓рд╛ рдЕрдХреНрд╖рд░ рдмрдбрд╝рд╛ рд╣реИ, рдмрд╛рдХреА рдЫреЛрдЯреЗ рд╣реИрдВред рджреЛ-рд╢рдмреНрдж рдирд╛рдо рд╕рдВрднрд╡ рд╣реИрдВ, рдПрдХ рд╕реНрдерд╛рди рдпрд╛ рдПрдХ рд╢реВрдиреНрдп рдЪрд┐рд╣реНрди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдореЗрдВ рддреАрди рд╕реЗ рдЖрда рдЕрдХреНрд╖рд░ AZред
рдЗрд╕ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рдореВрд╣ рд╢рдмреНрджреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
([-][-]{2,7})
ред рдФрд░ рдирд╛рдо рдХреНрд░рдорд╢рдГ,
([-][-]{2,7}(?:[- ][-][-]{2,7}))
ред
рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рдХреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ 6 рдЙрдВрдЧрд▓рд┐рдпрд╛рдВ рд╣реИрдВ, рд░реЛрдЬрдорд░реНрд░рд╛ рдХреА рдЬрд┐рдВрджрдЧреА рдореЗрдВ рдЧреНрд░рд╣рдгреА рдкреНрд░рдгрд╛рд▓реАред рд╕рдВрдЦреНрдпрд╛ реж- реп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ резреж рдФрд░ резрез рд╕рдВрдХреЗрдд ~
рдФрд░ тАУ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рд╣рдо рд╕реАрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП
\d
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ
[0-9~тЙИ]
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд░рдЪрдирд╛ рдореЗрдВ рдкреЛрд╕реНрдЯ рдСрдлрд┐рд╕ рдирдВрдмрд░ рдореЗрдВ рдпрд╛ рддреЛ 3 рдЕрдВрдХ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╛ 4 рд╢реВрдиреНрдп рд╕реЗ 2 рдЕрдВрдХреЛрдВ рдХреЗ 2 рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг: 300
, 44-99
ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╕рдореВрд╣ рдкреЛрд╕реНрдЯ рдСрдлрд┐рд╕ рдирдВрдмрд░
([0-9~тЙИ]{3}|[0-9~тЙИ]{2}-[0-9~тЙИ]{2})
рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдХрднреА-рдХрднреА рдирд┐рд╡рд╛рд╕реА рдорд╛рдВрдЧ рдкрд░ рдирдЧрд░рдкрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкрддреНрд░ рднреЗрдЬрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЛрдИ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ: рдХреЗрд╡рд▓ рдирдЧрд░рдкрд╛рд▓рд┐рдХрд╛ рдФрд░ рдкрддреЗ рд╡рд╛рд▓реЗ рдХрд╛ рдирд╛рдоред
рд╣рдо рдЕрдВрддрд┐рдо рдлрд╝рдВрдХреНрд╢рди рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рд╕рдордЭрддреЗ рд╣реИрдВ, рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд┐рд▓рд╛ рдФрд░ рдкреЛрд╕реНрдЯ рдСрдлрд┐рд╕ рдПрдХ рд╕рд╛рде рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИ, рд▓реЗрдХрд┐рди рдЧреНрд░рд╣ рдкрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдЫрд╣ рдирд╛рдо рдФрд░ рдиреМ рдЙрдкрдирд╛рдо рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд╛рдо: рд╢реЛрдм, рд░рдпреЛрдм, рдореЛрдм, рдЬрд┐рдпрд╛рдВрдЧ, рд░рдпрд╛рди, рдореИрдиреНрд╕ред рдЙрдкрдирд╛рдо: рдерд╛рдиреЗрджрд╛рд░, рд░рд┐рдпреЛ, рдореЛ, рдЬрд╝рд┐рдпрд╛, рд░рд╛рдпрд╛, рдорд╛, рд╕реНрдпреВ, рд░рдпреВ, рдореБред рдЗрд╕ рдЧреНрд░рд╣ рдХреЗ рдирд┐рд╡рд╛рд╕реА рд╕рдкрдиреЗ рджреЗрдЦрдиреЗ рд╡рд╛рд▓реЗ рдирд╣реАрдВ рд╣реИрдВред
рдпрд╣ рд╣рд╛рд▓рдд рдХрд╛ рдЖрдЦрд┐рд░реА рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рд╕рд░рд▓ рд╕рдореВрд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА
(||||||||) (|||||)
рдпрд╛ рдЗрд╕рдХреЗ рдЫреЛрдЯреЗ рд╕рдордХрдХреНрд╖
([][]|[]) ([C]|[]||)
рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рдореВрд╣реЛрдВ рдХреЛ рдЪрд░ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
const w = '[-][-]{2,7}';
рдХрд╛рд░реНрдп 2. рд╡рд╣ рдХреЛрдб рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛ
рд╢рд░реНрдд
рджрд┐рди рдХреЗ рджреМрд░рд╛рди, рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдиреЗ рдХрдИ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдмрдирд╛рдИрдВред рд▓реЗрдХрд┐рди рд░рд┐рд▓реАрдЬ рдХреА рддреИрдпрд╛рд░реА рдореЗрдВ, рдорд░реНрдЬ рд╕рдВрдШрд░реНрд╖ рд╣реБрдЖ, рдФрд░ рдЙрдирдХреЗ рд╣рд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд▓реЗрдЖрдЙрдЯ рдиреЗ рднрд╛рдЧ рд▓рд┐рдпрд╛ред рдХреЛрдб рдореЗрдВ рдиреНрдпреВрдирддрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рдХрд╛рд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рддрддреНрдХрд╛рд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЖрдиреЗ рдХрд╛ рд╕рдордп рдирд┐рдХрд▓ рдЬрд╛рдПред
рдЖрдкрдХреЛ рдЯреВрдЯреА рд╣реБрдИ рд╢реИрд▓рд┐рдпреЛрдВ рдФрд░ рдПрдХ PNG рдкреНрд░рд╛рд░реВрдк (рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде) рдХреЗ рд╕рд╛рде рдПрдХ HTML рдкреГрд╖реНрда рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреНрд░реЛрдо рдореЗрдВ рджреЗрдЦрдиреЗ рдкрд░ рдкрд░рд┐рдгрд╛рдо рдореВрд▓ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рд╕рдорд╛рди рд╣реЛ рдЬрд╛рдПред рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реА рдкреГрд╖реНрда рднреЗрдЬреЗрдВред
HTML рдкреЗрдЬ рдЯреВрдЯреА рд╣реБрдИ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред рд▓реЗрдЖрдЙрдЯ:

рдкрджрдЪреНрдЫреЗрдж
рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ, рд╣рдордиреЗ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреА рдирдХрд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЬреЛ рдпрд╛рдВрдбреЗрдХреНрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдореБрдарднреЗрдбрд╝ рдХрд░рддреЗ рд╣реИрдВ: рд╡рд┐рд╢рд╛рд▓ рдХреЛрдб рдЖрдзрд╛рд░ рдореЗрдВ, рдХреЛрдб рдХреА рдмрд╣реБрдд рдХрдо рд╕рд░рд▓ рд░реЗрдЦрд╛рдПрдВ рдвреВрдВрдврддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕реБрдзрд╛рд░ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдХрдард┐рдирд╛рдИ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдХрд╣рд╛рдВ рд▓рд┐рдЦрдирд╛ рд╣реИ (рдпрд╛ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдВ)ред
рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЦреЛрдЬ рдЗрдВрдЬрди рдХреЛрдб рд▓рд┐рдпрд╛ рдФрд░ рд▓реЗрдЖрдЙрдЯ рдХреЛ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рд╕реБрдзрд╛рд░ рдХрд┐рдПред рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рд▓рдЧрднрдЧ 250 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рд▓реЗрдЖрдЙрдЯ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдФрд░ рд▓реЗрдЖрдЙрдЯ рдХреЗ рдЕрдиреБрд░реВрдк рд░рд╛рдЬреНрдп рдореЗрдВ рдХреЛрдб рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рднреА рдХрдо рд╕рдордп рдерд╛ред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реАрдорд╛ рдиреЗ рдкреВрд░реЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА, рдЗрд╕рд▓рд┐рдП рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЪрд╛рд░ рдХрд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдкрд░реНрдпрд╛рдкреНрдд рдереЗ:
diff --it / a / blitz.html b / blitz.html
рд╕реВрдЪрдХрд╛рдВрдХ 36b9af8..1e30545 100644
--- a / blitz.html
+++ b / blitz.html
@@ -531.10 +531.6 @@
iframe [src $ = 'ext-analytics.html'] {
рдКрдВрдЪрд╛рдИ: рдСрдЯреЛ;
}
-search2__button .suggest2-form__button: nth-child (1) {
- рдкреГрд╖реНрдарднреВрдорд┐: # ff0; рдорд╣рддреНрд╡рдкреВрд░реНрдг;
-}
-
/ * ../../blocks-desktop/input/__control/input__control.styl end * /
/ * ../../ode_modules/islands/common.blocks/input/__clear/input__clear.css рд╢реБрд░реВ * /
/ * Input__box рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реНрдерд┐рддрд┐ред
@@ -744.10 +740.6 @@
iframe [src $ = 'ext-analytics.html'] {
рдкреГрд╖реНрдарднреВрдорд┐-рдХреНрд▓рд┐рдк: рдкреИрдбрд┐рдВрдЧ-рдмреЙрдХреНрд╕;
}
.input_theme_websearch .input__clear {
рдкреГрд╖реНрдарднреВрдорд┐-рдЫрд╡рд┐: url ("/ static / web4 / node_modules / Islands / common.blocks / input / _theme / input_theme_websearch.assets / clear.svg");
рдкреГрд╖реНрдарднреВрдорд┐ рдХрд╛ рдЖрдХрд╛рд░: 16 рдкреАрдПрдХреНрд╕;
@@ -857.6 +849.7 @@
iframe [src $ = 'ext-analytics.html'] {
рдкреГрд╖реНрдарднреВрдорд┐-рд░рдВрдЧ: # f2cf46;
}
.websearch-button__text: рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ {
+ рд╕реНрдерд┐рддрд┐: рдирд┐рд░рдкреЗрдХреНрд╖;
рд╢реАрд░реНрд╖: -6 рдкреАрдПрдХреНрд╕;
рджрд╛рдИрдВ рдУрд░: -9 рдкреАрдПрдХреНрд╕;
рдЪреМрдбрд╝рд╛рдИ: 0;
@@ -866.8 +859.6 @@
iframe [src $ = 'ext-analytics.html'] {
рд╕реАрдорд╛-рд╢реИрд▓реА: рдареЛрд╕;
рд╕реАрдорд╛-рд░рдВрдЧ: rgba (255,219,76,0);
рд╕реАрдорд╛-рд╡рд╛рдо-рд░рдВрдЧ: рд╡рд┐рд░рд╛рд╕рдд;
- рд╕реНрдерд┐рддрд┐: рд░рд┐рд╢реНрддреЗрджрд╛рд░;
- рдЬреЗрдб-рдЗрдВрдбреЗрдХреНрд╕: -1000;
}
/ * ../../blocks-deskpad/websearch-button/websearch-button.styl рдЕрдВрдд * /
@@ -1349.6 +1340.7 @@
iframe [src $ = 'ext-analytics.html'] {
рдлрд╝реЙрдиреНрдЯ-рдЖрдХрд╛рд░: 14 рдкреАрдПрдХреНрд╕;
рд▓рд╛рдЗрди-рдКрдБрдЪрд╛рдИ: 40 рдкреАрдПрдХреНрд╕;
рд╕реНрдерд┐рддрд┐: рд░рд┐рд╢реНрддреЗрджрд╛рд░;
+ рдкреНрд░рджрд░реНрд╢рди: рдЗрдирд▓рд╛рдЗрди-рдмреНрд▓реЙрдХ;
рдКрдВрдЪрд╛рдИ: рдСрдЯреЛ;
рдЧрджреНрджреА: 0;
рдКрд░реНрдзреНрд╡рд╛рдзрд░-рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░реЗрдВ: рдордзреНрдп;
рдХрд╛рд░реНрдп 3. рджреА рдЧрдИ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╕реНрд╡реАрд░
рд╢рд░реНрдд

рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдиреЗ рд▓реЛрдЧреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ред рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд╢реБрджреНрдз рд╕реАрдПрд╕рдПрд╕ рдореЗрдВ рдПрдХ рдПрдЪрдЯреАрдПрдордПрд▓ рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдмрдирд╛рдПрдВред
рдЖрдк рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдбреЗрдЯрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ: uri)ред
рдкрджрдЪреНрдЫреЗрдж
рдЪреВрдБрдХрд┐ рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рдПрдХ div рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдерд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ div рдФрд░ рдЫрджреНрдо рддрддреНрд╡ рд╣реИрдВ :: рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд┐рднрд┐рдиреНрди рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд┐рд░реНрдл рддреАрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд▓реЗрдЖрдЙрдЯ рдкрд░ рдЪрд┐рддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╕реБрд▓рдн рддрддреНрд╡, рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реНрдерд┐рддрд┐ рдФрд░ рдЧреЛрд▓ рдХреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдкреГрд╖реНрдарднреВрдорд┐ рдмрдирд╛рддреЗ рд╣реИрдВред рд▓реЗрдЖрдЙрдЯ рдХреЗ рдЧреНрд░реЗ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдПрдХ рдЫрд╛рдпрд╛ рд╣реИ - рд╣рдо рдЗрд╕реЗ рдПрдХ рдврд╛рд▓ рдХреЗ рд╕рд╛рде рдмрдирд╛рддреЗ рд╣реИрдВред
div { background: #0C0C0C; border-radius: 10px; position: relative; } div:before { border-radius: 9px 9px 0 0; position: absolute; width: 100%; height: 50%; background: #F8E34B; content: ''; } div:after { content: ''; background: linear-gradient(178deg, #C8C8C8 0px , transparent 7px), #EEEDEF; position: absolute; width: 50%; height: 50%; bottom: 0; border-radius: 0 0 0 9px; }
рдЯрд╛рд╕реНрдХ 4
рд╢рд░реНрдд
рдкреЗрдЯреНрдпрд╛ рдореЙрд╕реНрдХреЛ рдлреНрд░рдВрдЯреЗрдВрдбрд░ рдЕрдЦрдмрд╛рд░ рдореЗрдВ рдПрдХ рд╡рд░рд┐рд╖реНрда рдЯрд╛рдЗрдкрд╕реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╕рдорд╛рдЪрд╛рд░ рдкрддреНрд░ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд▓рд┐рдП рдкреЗрдЯреНрдпрд╛ рд╡реЗрдм рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЗ рдвреЗрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдХрдард┐рди рдХрд╛рдо рдЬреЛ рдкреЗрдЯрд┐рдпрд╛ рдиреЗ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╡рд╣ рдЕрдЦрдмрд╛рд░ рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╢реАрд░реНрд╖рдХреЛрдВ рдХрд╛ рд▓реЗрдЖрдЙрдЯ рдерд╛: рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрдХ рдореЗрдВ рдЕрдЦрдмрд╛рд░ рдХреЗ рдХреЙрд▓рдо рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреМрдбрд╝рд╛рдИ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╢реАрд░реНрд╖рдХреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝реЙрдиреНрдЯ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╡рд░реНрдг рд╣реЛрддреЗ рд╣реИрдВред
рдкреЗрдЯреА рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд╣реЗрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдлреЙрдиреНрдЯ рд╕рд╛рдЗрдЬ рдЪреБрдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рддрд╛рдХрд┐ рдлреЙрдиреНрдЯ рдХрд╛ рд╕рд╛рдЗрдЬ рдЕрдзрд┐рдХрддрдо рд╣реЛ, рд▓реЗрдХрд┐рди рдЙрд╕реА рд╕рдордп рд╕рднреА рд╣реЗрдбрд┐рдВрдЧ рдЯреЗрдХреНрд╕реНрдЯ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рд╕реНрдкреЗрд╕ рдореЗрдВ рдлрд┐рдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред
рдкреЗрдЯреНрдпрд╛ рдХреА рдорджрдж рдХрд░реЗрдВ: рдХреИрд▓реНрдХреЙрдиреНрдЯрд╛рд╕рд╛рдЗрдЬрд╝ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЬреЛ рдЖрдкрдХреЛ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдкрд╛рда рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рддрд╛рдХрд┐ рдпрд╣ рдкреВрд░реЗ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдлрд┐рдЯ рд╣реЛ рдЬрд╛рдП рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдЖрдХрд╛рд░ рд╣реЛред рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдорд╛рдзрд╛рди рд╢реВрдиреНрдп рд╡рд╛рдкрд╕ рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХрддрдо рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ 100 рд╡рд░реНрдг рд╣реИред рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреАред рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рд╕рдВрдкреВрд░реНрдг рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдмрд╛рд╣рд░реА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдкреЗрдЯреАрдП рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХреЗ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреЙрд▓ рдХрд░ рд╕рдХреЗред
рд╣рдо рдпрд╣ рдЬрд╛рдВрдЪреЗрдВрдЧреЗ рдХрд┐ рдЖрдкрдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЛрдо рд╣реЗрд░рдлреЗрд░ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдареАрдХ рд╣реИред
рдкрджрдЪреНрдЫреЗрдж
рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕реАрдЦреЗрдВ рдХрд┐ рдкрд╛рда рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкрд╛рда рдХрдИ рд▓рд╛рдЗрдиреЗрдВ рд▓реЗ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ
рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
редgetBoundingClientRect () рдлрд╝рдВрдХреНрд╢рди, рдЬреЛ рдЖрдкрдХреЛ рддрддреНрд╡ рдХреЗ рдЖрдпрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЖрдк рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЕрд▓рдЧ рд╕реНрдкреИрди рддрддреНрд╡ рдХреЗ рд╕рд╛рде рдкрд╛рда рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрддреНрд╡ рдХреА рдЪреМрдбрд╝рд╛рдИ рдпрд╛ рдКрдВрдЪрд╛рдИ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рд╣рд╛рдБ, рддреЛ рдкрд╛рда рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдЕрдЧрд▓рд╛, рд╕реАрдорд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдпрджрд┐ рдкрд╛рда рдиреНрдпреВрдирддрдо рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рднреА рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдкрд╛рда рдЕрдзрд┐рдХрддрдо рдЕрдиреБрдордд рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЯреВрдЯрддрд╛ рд╣реИ, рддреЛ рдЕрдзрд┐рдХрддрдо рд╕рд╣реА рдЙрддреНрддрд░ рд╣реЛрдЧрд╛ред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡рд╛рдВрдЫрд┐рдд рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░ рдЕрдВрддрд░рд╛рд▓ [рдиреНрдпреВрдирддрдо, рдЕрдзрд┐рдХрддрдо] рдореЗрдВ рдХрд╣реАрдВ рд╣реИред
рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдкреВрд░реЗ рдЕрдВрддрд░ рдХреЛ рдЫрд╛рдБрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдлрд╝реЙрдиреНрдЯ-рдЖрдХрд╛рд░ рдХрд╛ рдорд╛рди рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕ рдкрд░ рдкрд╛рда рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕реЗ 1 рд╕реЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдлрд┐рдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдк рд░реЗрдВрдЬ [рдорд┐рдирдЯ, рдЕрдзрд┐рдХрддрдо] рдкрд░ рд▓реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдорд╛рдзрд╛рди рдкреЗрдЬ рдХреА рдмрд╣реБрдд рд╕рд╛рд░реА рдЬрд╛рдВрдЪ рдФрд░ рд░реАрдбреНрд░рд╛ рдХрд░реЗрдЧрд╛ - рд░реЗрдВрдЬ рдореЗрдВ рдЪреЗрдХ рдХрд┐рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдПрдХред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЬрдЯрд┐рд▓рддрд╛ рд░реИрдЦрд┐рдХ рд╣реЛрдЧреАред
рдЪреЗрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рдПрдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ O (log n) рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЦреЛрдЬ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рдореВрд▓реНрдпреЛрдВ рдХреА рд╢реНрд░реЗрдгреА рдХреЛ рджреЛ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЦреЛрдЬ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реВрдк рд╕реЗ рдЙрд╕ рдЖрдзреЗ рднрд╛рдЧ рдореЗрдВ рдЬрд╛рд░реА рд░рд╣рддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╛рдзрд╛рди рд╕реНрдерд┐рдд рд╣реИред рдЬрдм рд╕реАрдорд╛ рдПрдХрд▓ рдорд╛рди рдкрд░ рдЧрд┐рд░ рдЬрд╛рдПрдЧреА рддреЛ рдЦреЛрдЬ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧреАред
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦ рдореЗрдВ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВред
рд╣рдордиреЗ
MutationObserver рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЬрдЯрд┐рд▓рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА: рд╣рдордиреЗ рдЗрд╕реЗ рдкреГрд╖реНрда рдкрд░ рд░рдЦрд╛ рдФрд░ рдЧрдгрдирд╛ рдХреА рдХрд┐ рдЙрддреНрддрд░ рдЦреЛрдЬрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ DOM рдХрд┐рддрдиреЗ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рдХреА рдЧрдгрдирд╛ рдХреАред рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдКрдкрд░ рд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рд╕реАрдорд┐рдд рдереА рддрд╛рдХрд┐ рдХреЗрд╡рд▓ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЦреЛрдЬ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рд╕рдорд╛рдзрд╛рди рдЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХреЗред
рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕реНрдХреЛрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реАрдорд╛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ (рдорд┐рд▓рд╛рди рдорд┐рдирдЯ рдФрд░ рдЕрдзрд┐рдХрддрдо, рдЗрдирдкреБрдЯ рдкрд░ рдкрд╛рда рдХреА рдПрдХ рдЦрд╛рд▓реА рд░реЗрдЦрд╛) рдХреА рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдФрд░ рдХрдИ рдкрд░реНрдпрд╛рд╡рд░рдгреАрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдб рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реАрдПрд╕рдПрд╕ рдкреГрд╖реНрда рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдлрд╝реЙрдиреНрдЯ-рдЖрдХрд╛рд░! )ред
рдХрд╛рд░реНрдп 5. рд╕рдВрдЪрд╛рд░ рдореЗрдВ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ
рдкреНрд░рддреНрдпреЗрдХ рдпреЛрдЧреНрдпрддрд╛ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ, рдПрдХ рдХрд╛рд░реНрдп рдерд╛ рдЬрд╣рд╛рдВ рдХреБрдЫ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ HTML рдкреГрд╖реНрда рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХрд┐рдВрд╡рджрдВрддреА рдереА, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдЗрд╕ рддрдереНрдп рд╕реЗ рдЙрдмрд░реЗ рдереЗ рдХрд┐ рдкреГрд╖реНрда рд╕реЗ рдХреБрдЫ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдФрд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХрд┐рд╕реА рддрд░рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВред
рдЖрдЗрдП рд╣рдо рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ "рд╕рдВрдЪрд╛рд░ рдореЗрдВ рдХрдард┐рдирд╛рдЗрдпрд╛рдБ" рдХрд╣рд╛ рдЬрд╛рддрд╛ рдерд╛ред
рд╢рд░реНрдд
рдШреЛрдбрд╝реЗ рдПрдбреЙрд▓реНрдл рдХреЛ рдлреЛрди рдкрд░ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рджреБрд░реНрд▓рдн рд╣реИред рд╣рд░ рдмрд╛рд░ рдЬрдм рдПрдбреЙрд▓реНрдл рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдПрдХ рджреЛрд╕реНрдд рдХреА рд╕рдВрдЦреНрдпрд╛ рдбрд╛рдпрд▓ рдХрд░рдиреЗ рдореЗрдВ рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдореЛрдЯреА рдЦреБрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдЪрд╛рдмрд┐рдпрд╛рдБ рд╣рд┐рдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдПрдбреЙрд▓реНрдл рдХрд╛ рдлреЛрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦреЗрдВ рдЬреЛ рдХреАрдмреЛрд░реНрдб рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдПрдбреЛрд▓реНрдл рдХреЗ рджреЛрд╕реНрддреЛрдВ рдХреЛ рдбрд╛рдпрд▓ рдХрд░рддрд╛ рд╣реИред рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдирдВрдмрд░ рдПрдХ рдиреЛрдЯрдмреБрдХ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдШреЛрдбрд╝рд╛ рдЖрдкрдХрд╛ рдмрд╣реБрдд рдЖрднрд╛рд░реА рд╣реЛрдЧрд╛!
рдкрджрдЪреНрдЫреЗрдж
рдпрд╣рд╛рдБ рд╡рд╣ рдкреГрд╖реНрда рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рд╕рдорд╛рдзрд╛рди рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИрдлреЛрди рдирдВрдмрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЕрдВрдХ рдХреЛ рдПрдХ рдЪрд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рдкреГрд╖реНрдарднреВрдорд┐-рдЫрд╡рд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕реА рд╕рдордп, рд╕рддреНрдпрд╛рдкрди рдХреЗ рджреМрд░рд╛рди, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдбреАрдмрдЧрд░ рдХреЛ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ рдкреГрд╖реНрда рдХреЗ DOM рдЯреНрд░реА рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ DOM рддрддреНрд╡ рд╕реНрдкрд╖реНрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
<div class="game"> <div class="target"> <div class="line"> <div class="symbol nine"></div> <div class="symbol eight"></div> <div class="symbol five"></div> <div class="symbol separator"></div> <div class="symbol four"></div> <div class="symbol one"></div> <div class="symbol two"></div> <div class="symbol separator"></div> </div> </div> </div>
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдиреЗ, рд╕реАрдПрд╕рдПрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ (рд╕реАрдПрд╕рдПрд╕ рд╡рд░реНрдЧ рд╡рд┐рднрд╛рдЬрдХ) рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
const digits = document.querySelectorAll('.game .target .symbol:not(.separator)'); const dict = { 'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6, 'seven': 7, 'eight': 8, 'nine': 9, 'zero': 0, }; const phoneNumber = Array.from(digits).reduce((res, elem) => { for (const className of elem.classList) { if (className in dict) { res.push(dict[className]); break; } } return res; }, []);
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд░рдгреА рдорд┐рд▓рддреА рд╣реИ: [9, 8, 5, 4, 1, 2, 8, 0, 9, 0]ред
рд╕рдорд╛рдзрд╛рди рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдирд╛ рд╣реИрдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рднреА рдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреАрдмреЛрд░реНрдб рдкрд░ рдХреМрди рд╕реЗ рдмрдЯрди рдХрд┐рд╕ рдЕрдВрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рдпрджрд┐ рд╣рдо HTML рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдВрдХреЗрдд рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдХреАрдмреЛрд░реНрдб рдкрд░ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗ рд░рд╣рд╛ рд╣реИ:
<div class="keys"> <div class="key"></div> <div class="key"></div> </div>
рдХреЛрдИ рдХреЗрд╡рд▓ рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдФрд░ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рд╡реЗрдм рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдХрд░реАрдм рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ рдХрд┐ рдмрдЯрди рдкрд░ рд╕рдВрдЦреНрдпрд╛ рд╕реАрдПрд╕рдПрд╕ рд╕рдВрдкрддреНрддрд┐ рд╕рд╛рдордЧреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЗрдЯ рдХреА рдЧрдИ рд╣реИ: рдЫрджреНрдо рддрддреНрд╡ рд╕реЗ рдкрд╣рд▓реЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "3" рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП, рд╢реИрд▓рд┐рдпрд╛рдБ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИрдВ:
.key:nth-child(3):before { content: '3'; }
рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо window.getComputedStyle рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
const keys = Array.from(document.querySelectorAll('.game .key')).reduce((res, elem) => { const key = window
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдорд┐рд▓рддреА рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рдореБрдЦ рдЧреНрд░рдВрде рдмрдЯрди (рд╕рдВрдЦреНрдпрд╛ рдпрд╛ "рдХреЙрд▓") рдкрд░ рдЧреНрд░рдВрде рд╣реЛрдВрдЧреЗ, рдФрд░ рдорд╛рди рдбреЛрдо рдиреЛрдб рд╣реЛрдВрдЧреЗред
рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕рд░рдгреА (рдлреЛрдирдирдВрдмрд░) рд╕реЗ рдорд╛рди рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ, рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдХреБрдВрдЬреАрд╢рдмреНрдж рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:
phoneNumber.push('call'); const call = () => { const event = new Event('click'); const next = phoneNumber.shift(); keys[next].dispatchEvent(event); if (phoneNumber.length) { setTimeout(call, 100); } } call();
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рдбрд╛рдпрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рд░рдгреА рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдХреЙрд▓ рд╡реИрд▓реНрдпреВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдпрд╣ рдХрд╛рд░реНрдп рдХреА рд╢рд░реНрддреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдирдВрдмрд░ рдбрд╛рдпрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ "рдХреЙрд▓" рдирд╣реАрдВ рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╕рдорд╛рдзрд╛рди рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдПрдХ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреАрдмреЛрд░реНрдб рдмрдЯрди рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рджрдмрд╛рд╡ рд╣реИред рдпрджрд┐ рдбрд╛рдпрд▓ рдХрд░рддреЗ рд╕рдордп рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ 50 рдПрдордПрд╕ рд╕реЗ рдХрдо рд╣реИ, рддреЛ рдпрд╣ рд╕рдорд╛рдзрд╛рди рднреА рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╣рдордиреЗ рдкреГрд╖реНрда рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрдврд╝рдХрд░ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреАред рд╡реИрд╕реЗ, рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖред ;)
рдЯрд╛рд╕реНрдХ 6
рд╢рд░реНрдд
Fedor Rakushkin рдЕрдкрдиреА рдХрдВрдкрдиреА рдореЗрдВ рдХрд╛рд░реНрдп рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред рдЬрд┐рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдерд┐рдд рд╣реИ рд╡рд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ (рдФрд░ рдлреЗрдбрд░ рдиреЗ рдмреИрдХрдЕрдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)ред
рд╕рд░реНрд╡рд░ рдХреА рдореЗрдореЛрд░реА рдореЗрдВ, рдХрд╛рд░реНрдпреЛрдВ, рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдФрд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдПрдХ рдХреИрд╢ рдмрдирд╛ рд░рд╣рд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдВрддрд┐рдо рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреИрд╢ рд▓рд┐рдВрдХ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдлрд╝реЗрдбрд░ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдХрдиреЗрдХреНрд╢рди рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдорд╛рд░реНрдХрдбрд╛рдЙрди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдлрд╝реЗрдбреЛрд░ рдлрд┐рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдПрдХ рдирдП рд╕рд░реНрд╡рд░ рдкрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛ред
рдорд╛рд░реНрдХрдбрд╛рдЙрди рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
## - % 1%, %username1%, : %username2% - % 2%, %username1%, : %username2%, %username3% - % 3%, %username1% // - % 4%, : %username1%, %username2% // - % 5% // - % 6%, : %username1% - % 1%, %username1% // - % 2% - % 3%, : %username1% ## - %username1% * % 1% // , * % 2% * % 3% * % 1% - %username2% * % 3%
рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА, рдХрд╛рд░реНрдп рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдХреА рд╕реВрдЪреА, рдХрд╛рд░реНрдп рдореЗрдВ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреА рд╕реВрдЪреА, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рд░реВрдк рд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдХреИрд╢ рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХреИрд╢ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЯрд╛рдЗрдк `рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛` рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ:
type User = { login: string; tasks: Task[]; spectating: Task[]; };
рдЯрд╛рд╕реНрдХ рдХреЛ рдХреИрд╢ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
type Task = { title: string; assignee: User; spectators: User[]; subtasks: Task[]; parent: Task | null; };
рд╕рдорд╛рдзрд╛рди рдЯреЗрдореНрдкрд▓реЗрдЯ
рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХреЙрдордирдЬрд╕ рдореЙрдбреНрдпреВрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдирд┐рдореНрди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ рдЕрдиреБрд░реВрдк рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ:
module.exports = function (data) {
рдЙрджрд╛рд╣рд░рдг
рдпрджрд┐ рдЖрдк `lastEdited` рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рдорд┐рд▓реЗрдЧреА:
{ type: 'task', title: 'Sub task', assignee: null, spectators: [], subtasks: [], parent: { type: 'task', title: 'Something else', assignee: null, spectators: [ { type: 'user', login: 'fedor', tasks: [ { type: 'task', title: 'Do something', assignee: [Circular], spectators: [ { type: 'user', login: 'arkady', tasks: [], spectating: [ [Circular] ] } ], subtasks: [], parent: null } ], spectating: [ [Circular] ] } ], subtasks: [ [Circular] ], parent: null } }
Markdown , :
## - Do something, fedor, : arkady - Something else, : fedor - Sub task ## - arkady - fedor * Do something
, .
, , . , :
function traverse(ctx, handlers) {
. , , тАж
users.sort((u1, u2) => u1.login < u2.login ? -1 : (u1.login > u2.login ? 1 : 0)); tasks.sort((t1, t2) => t1.title < t2.title ? -1 : (t1.title > t2.title ? 1 : 0));
тАж тАФ :
7.
, .. :

, . , ┬л┬╗.

.

, . , . . . HTML CSS. JavaScript .
, , - . , .
HTML/CSS, , , - .
CSS, , тАФ float, . float , , .
тАФ , . (
jsfiddle.net .)
тАФ padding-top, margin-top ( ). DOM- (). (
.)
8.
HTML-. , . , . .
(pixel perfect). .
. .
, , . , . , : - , , .
, . , , .
, тАФ . тАФ CSS- border ( ), background ( ) box-shadow ( ).
- ┬л ┬╗ ( ) . , , .
тАФ , 70 70 . : , . CSS- , CSS- , .

тАФ 210 210 , 70 70 .

9.
тАФ , -. JavaScript, . , .
: . , , . .
, тАФ . тАФ . , JavaScript API . , -, , . 10 , HTTP- .
тАФ . , , , .
-.
:
тАФ API npm- @yandex-blitz/phone.
тАФ
API .
тАФ -, :
task.js .
тАФ -
runkit- .
-, .
тАФ GET- return connect.
: - . , , . .
, : , . :
const writeQueue = []; const processQueue = () => { if (writeQueue.length) { const fn = writeQueue.shift(); fn().then(() => { processQueue(); }); } }
, ┬л ┬╗.
const writeQueue = []; let isWriteInProgress = false; const processQueue = () => { if (isWriteInProgress) { return; } if (writeQueue.length) { isWriteInProgress = true; const fn = writeQueue.shift(); fn().then(() => { isWriteInProgress = false; processQueue(); }); } }
, POST- . , , .
app.post("/speeddial/:digit/:phonenumber", (req, res) => { writeQueue.push(makeWriteJob(phone, req, res)); processQueue(); });
:
const express = require('express'); const { BEEP_CODES } = require('@yandex-blitz/phone'); const writeQueue = []; let isWriteInProgress = false; const processQueue = () => { if (isWriteInProgress) { return; } if (writeQueue.length) { isWriteInProgress = true; const fn = writeQueue.shift(); fn().then(() => { isWriteInProgress = false; processQueue(); }); } } const makeWriteJob = (phone, req, res) => { return () => { return phone.getData() .then(value => { const speeddialDict = JSON.parse(value); speeddialDict[req.params.digit] = Number(req.params.phonenumber); return phone .setData(JSON.stringify(speeddialDict)) .then(() => phone.beep(BEEP_CODES.SUCCESS)) .then(() => { res.sendStatus(200); }) }) .catch(e => { phone.beep(BEEP_CODES.ERROR).then(() => { res.sendStatus(500); }) }) } }; const createApp = ({ phone }) => { const app = express();
10.
. , ┬л┬╗.
:
тАФ , .
тАФ , , .
тАФ , , .
тАФ , : тЖР тЖУ тЖС тЖТ.
тАФ тАФ , .
, , , , .
.
.
HTML- ( ).
, window.onMazeReady(). . 2 , .
CSS- map.
click CSS-:
тАФ тАФ control_direction_left,
тАФ тАФ control_direction_down,
тАФ тАФ control_direction_up,
тАФ тАФ control_direction_right.
CSS- :
background: radial-gradient(circle at 5px 5px, #eee, #000);
25 , 500 . рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:




window.map String. :
# тАФ
ред тАФ
o тАФ
x тАФ
, , , тАФ . .
,
window.map = ` ##### #o#x# #.#.# #...# ##### `;
:

:
<!DOCTYPE html> <html lang=ru/> <head> <style> body { padding: 100px 0 0 100px; } .game-box { perspective: 500px; perspective-origin: center; } .map { transform-style: preserve-3d; } .map__tilt_left { transform: rotateY(-25deg); } .map__tilt_down { transform: rotateX(-25deg); } .map__tilt_up { transform: rotateX(25deg); } .map__tilt_right { transform: rotateY(25deg); } </style> <title></title> </head> <body> <div class="game-box"> <div class="map"> </div> </div> <script> </script> </body> </html>
(HTML, CSS, JS). , ┬л┬╗ .
. ( ), , .
, , .
, :
<table class="map map__tilt_none"> <tr> <td class="map__cell map__cell_content_wall"></td> <td class="map__cell map__cell_content_empty"></td> <td class="map__cell map__cell_content_ball"></td> <td class="map__cell map__cell_content_exit"></td> <td class="map__cell map__cell_content_wall"></td> </tr> </table>
:
.map { border: 0; border-spacing: 0; border-collapse: separate; background-color: #ccc; transform-style: preserve-3d; } .map__cell { box-sizing: border-box; border: 1px solid; border-color: #9b9b9b #575757 #575757 #9b9b9b; width: 30px; height: 30px; text-align: center; vertical-align: middle; font-size: 0; line-height: 0; background-color: #707070; } .map__cell_content_ball:after { content: ''; display: inline-block; width: 20px; height: 20px; border-radius: 50%; background: radial-gradient(circle at 5px 5px, #eee, #000); } .map__cell_content_wall { border-width: 4px; } .map__cell_content_exit { background-color: #000; border: 5px solid; border-color: #222 #555 #555 #222; }
тАФ тАФ .
, .
┬л┬╗ , . , . , :
window.map = ` ####### ##.#### #..o..# ##x.#.# ###...# ####### `;
:
function convertMap(mapInput) { return mapInput .trim() .split(/\n\s*/) .map(row => row.split('')); }
, HTML :
const CELL_CONTENT = { '#': 'wall', 'o': 'ball', '.': 'empty', 'x': 'exit' }; function buildGameBoxHtml(map) { return ` <div class="game-box"> <table class="map map__tilt_none"> ${map.map(row => ` <tr> ${row.map(cell => ` <td class="map__cell map__cell_content_${CELL_CONTENT[cell]}"></td> `).join('')} </tr> `).join('')} </table> <!-- --> <div class="controls"> <button class="control control_direction_left">тЖР</button> <button class="control control_direction_down">тЖУ</button> <button class="control control_direction_up">тЖС</button> <button class="control control_direction_right">тЖТ</button> </div> </div> `; }
, :
let gameBox = document.querySelector('.game-box'); let map = gameBox.querySelector('.map');
тАФ callback : window.onMazeReady(). .
, . , , . HTML, CSS JS тАФ , .
, :
тАФ ,
тАФ , ,
тАФ , ,
тАФ , ,
тАФ , ,
тАФ , .
, :
тАФ ,
тАФ ,
тАФ DOM API ,
тАФ .
11.
, , . , . , .
, . , . . .js, :
module.exports = function solveCaptcha(captcha) {
. .
:
captcha = ' TRABWARH THSCAHAW WWBSCWAA CACACHCR '
:
тАФ S тАФ (sign)
тАФ T тАФ (tree)
тАФ R тАФ (road)
тАФтАж
:
[ 'TRABWARH THSCAHAW' , 'WWBSCWAA CACACHCR' ]
:
тАФ 1 10.
тАФ .
тАФ , .
тАФ ( ).
тАФ , , .
тАФ , .
Cut the cake codewars.com.
, 10. , . , . :
тАФ ;
тАФ , .
, . : ┬лтАж , ┬╗. . .

. . , . .
. ┬л┬╗, .
module.exports = function solveCaptcha(captcha) { const n =
12. -
X . VCS , .
, -. тАФ , .
, . , , . .
, . ( ) .
.
. тАФ 1000, - тАФ 20.
:
type PullRequest = { files: string[], id: string, created: number, }
(created) (id) тАУ .
CommonJS- :
module.exports = function (pullRequests) {
NodeJS v9.11.2. .
function mergeAllPRs(prs) { } console.assert( mergeAllPRs([ { id: '#1', created: 1536077100, files: ['.gitignore', 'README.md'] }, { id: '#2', created: 1536077700, files: ['index.js', 'package-lock.json', 'package.json'] }, { id: '#3', created: 1536077800, files: ['.pnp.js', 'yarn.lock'] } ]) .join(',') === [ "#1", "#2", "#3" ].join(',') ); console.assert( mergeAllPRs([ { id: '#1', created: 1536074100, files: ['README.md'] }, { id: '#2', created: 1536078700, files: ['README.md'] }, { id: '#3', created: 1536097800, files: ['README.md'] } ]).join(',') === [ "#1" ].join(',') ); console.assert( mergeAllPRs([ { id: '#1', created: 1536077100, files: ['.gitignore', 'README.md'] }, { id: '#2', created: 1536077700, files: ['index.js', 'package-lock.json', 'package.json'] }, { id: '#3', created: 1536077800, files: ['.pnp.js', 'package-lock.json', 'yarn.lock'] }, { id: '#4', created: 1536077900, files: ['index.spec.js', 'index.spec.ts', 'index.ts'] } ]) .join(',') === [ "#1", "#2", "#4" ].join(',') );
тАФ ,
.
, ┬л ┬╗ (, ).
, , , . ( some includes). тАФ O(n
2 ).
, , ( .
). тАФ O(n).
:
function conflicts(a, b) { let i = 0; let j = 0; while (i < a.length && j < b.length) { if (a[i] === b[j]) { return true; } else if (a[i] > b[j]) { j++; } else { i++; } } return false; } function mergeAllPrs (input) { let i = 0; const mergedFiles = []; const mergedPrs = []; while (i < input.length) { const pr = input[i]; if (!conflicts(mergedFiles, pr.files)) { mergedPrs.push(pr); mergedFiles.push(...pr.files); } i++; } return mergedPrs.map(x => x.id); };
, , . , :
console.assert( mergeAllPrs([ { "id": "1", "created": 1538179200, "files": [ "a", "b", "c", "d" ] }, { "id": "2", "created": 1538189200, "files": [ "a", "x" ] }, { "id": "3", "created": 1538199200, "files": [ "b", "g" ] }, { "id": "4", "created": 1538209200, "files": [ "c", "f" ] }, { "id": "5", "created": 1538219200, "files": [ "d", "w" ] } ]) .join(',') === ['2', '3', '4', '5'].join(',') );
, ( , ).
: ┬л┬╗ -, ┬л┬╗ тАФ ( ). ( ).
:
[ { "id": "#1", "created": 1536077100, "files": [ ".gitignore", "README.md" ] }, { "id": "#2", "created": 1536077700, "files": [ "index.js", "package-lock.json", "package.json" ] }, { "id": "#3", "created": 1536077800, "files": [ "index.js" ] } ]
#2 #3 , ["#1", "#2"]. .

, .
, тАФ O(n
2 ), . .
, , . , , .
conflicts , . :
const conflictMatrix = new Uint8Array(prs.length ** 2); const prToIndex = new WeakMap(); for (let i = 0; i < prs.length; i++) { const pr1 = prs[i]; prToIndex.set(pr1, i); conflictMatrix[i * prs.length + i] = 0; for (let j = i + 1; j < prs.length; j++) { const pr2 = prs[j]; conflictMatrix[i * prs.length + j] = conflictMatrix[j * prs.length + i] = conflicts(pr1.files, pr2.files); } } function doPRsConflict(pr1, pr2) { const i = prToIndex.get(pr1); const j = prToIndex.get(pr2); return conflictMatrix[i * prs.length + j] === 1; }
┬л┬╗ , . ( ) , . , , - .
, , .
function getNonConflictingPRs (prsSet, mergedPrs) { const result = []; const prsToTest = [...prsSet, ...mergedPrs]; prsSet.forEach((pr) => { if (!conflictsWithSomePR(pr, prsToTest)) { result.push(pr); } }); return result; }
.
const fullSearch = (prsSet, mergedPrs = [], mergedFilesCount = 0) => { hits++;
.