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

рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рд╕рд╛рде, рд╣рдо 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}'; // word const d = '[0-9~тЙИ]'; // digit const name = `(?:${w}(?:[- ]${w})?)`; const number = `(?:${d}{3}|${d}{2}-${d}{2})`; const person = '(?:[][]|[]) (?:|||||)'; // , , (,  , )?  const re = new RegExp(`^(${name}),\\s*(${name}),\\s*(?:(${name}),\\s*(${number}),\\s*)?(${person})$`); module.exports = function(str) { //      if (typeof str !== 'string') return null; const res = str.match(re); //   -   if (!res) return null; //    //    ,     return res.slice(1); }; 

рдХрд╛рд░реНрдп 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 //  CSSStyleDeclaration  - .getComputedStyle(elem, ':before') //    .getPropertyValue('content') //     ,      .replace(/"/g, ''); res[key] = elem; return res; }, {}); 

рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рд╡рд╕реНрддреБ рдорд┐рд▓рддреА рд╣реИ рдЬрд╣рд╛рдВ рдкреНрд░рдореБрдЦ рдЧреНрд░рдВрде рдмрдЯрди (рд╕рдВрдЦреНрдпрд╛ рдпрд╛ "рдХреЙрд▓") рдкрд░ рдЧреНрд░рдВрде рд╣реЛрдВрдЧреЗ, рдФрд░ рдорд╛рди рдбреЛрдо рдиреЛрдб рд╣реЛрдВрдЧреЗред

рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕рд░рдгреА (рдлреЛрдирдирдВрдмрд░) рд╕реЗ рдорд╛рди рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ, рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдПрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдХреБрдВрдЬреАрд╢рдмреНрдж рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ:

 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; }; 

рд╕рдорд╛рдзрд╛рди рдЯреЗрдореНрдкрд▓реЗрдЯ


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

 /** * @param {User|Task} data -     , *        (User  Task) * @return {string} */ module.exports = function (data) { //   return 'тАж'; } 

рдЙрджрд╛рд╣рд░рдг


 //    const User1 = { type: 'user', login: 'fedor', tasks: [], spectating: [] }; const User2 = { type: 'user', login: 'arkady', tasks: [], spectating: [] }; //    const Task1 = { type: 'task', title: 'Do something', assignee: null, spectators: [], subtasks: [], parent: null }; const Task2 = { type: 'task', title: 'Something else', assignee: null, spectators: [], subtasks: [], parent: null }; const Task3 = { type: 'task', title: 'Sub task', assignee: null, spectators: [], subtasks: [], parent: null }; //    : //      Task1.assignee = User1; User1.tasks.push(Task1); // ...    тАФ  Task1.spectators.push(User2); User2.spectating.push(Task1); //      , //       Task2.spectators.push(User1); User1.spectating.push(Task2); //      Task3.parent = Task2; Task2.subtasks.push(Task3); // ,     тАФ  3 const lastEdited = Task3; 

рдпрджрд┐ рдЖрдк `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 


, .

, , . , :

 /** *  ,     * @param {{ref: object, visited: ?boolean}} ctx * @param {object} handlers тАФ     */ function traverse(ctx, handlers) { //    ,  ctx.ref , тАФ ,     task.parent if (!ctx.ref) { return; } //   ,    ,       const visited = ctx.visited || new Set(); if (visited.has(ctx.ref)) { return; } visited.add(ctx.ref); //       handlers[ctx.ref.type](ctx.ref, goDeeper); //  ,       function goDeeper(subrefs) { //       for (const subref of [].concat(subrefs)) { traverse({ visited, ref: subref }, handlers); } } } //      const users = []; const tasks = []; // ref   тАФ     traverse({ ref }, { user(user, deeper) { users.push(user); deeper(user.tasks); // to task.assignee deeper(user.spectating); // to task.spectators }, task(task, deeper) { tasks.push(task); deeper(task.assignee); // to user.tasks deeper(task.spectators); // to user.spectating deeper(task.parent); // to task.subtasks deeper(task.subtasks); // to task.parent } ); 

. , , тАж

 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)); 

тАж тАФ :

 //    const taskLine = t => `${ t.title }${ t.assignee ? `,  ${t.assignee.login}` : '' }${ t.spectators.length ? `, : ${t.spectators.map(u => u.login).join(', ')}` : '' }`; function renderTasks (parent = null, indent = 0) { return tasks .filter(t => t.parent === parent) .map(t => [ '\n', ' '.repeat(indent), //  '- ', taskLine(t), //    t.subtasks.length ? printTasks(t, indent + 2) : '' //   ].join('')) .join(''); } function renderUsers () { return ${users.map(u => `\n- ${u.login}${ u.tasks.map(t => `\n * ${t.title}`).join('') }`).join('')} } const result = ` ##  ${renderTasks()} ##  ${renderUsers()} `.trim(); 

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(); //   ,   ┬л ┬╗   digit app.get("/speeddial/:digit", (req, res) => { phone.getData().then(value => { const speeddialDict = JSON.parse(value); return phone.connect() .then(async () => { await phone.dial(speeddialDict[req.params.digit]); res.sendStatus(200); }, async() => { await phone.beep(BEEP_CODES.FATAL); res.sendStatus(500); }); }).catch(async (e) => { await phone.beep(BEEP_CODES.ERROR); res.sendStatus(500); }); }); //   ┬л ┬╗   digit  phonenumber app.post("/speeddial/:digit/:phonenumber", (req, res) => { writeQueue.push(makeWriteJob(phone, req, res)); processQueue(); }); return app; }; exports.createApp = createApp; 

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> // JavaScript </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'); //           gameBox.addEventListener('click', ({ target }) => { //      if (!target.classList.contains('control')) { return; }; //      - const direction = target.className.match(/\bcontrol_direction_(\w+)/)[1]; //  ,   - map.className = map.className.replace(/\bmap__tilt_\w+/, `map__tilt_${direction}`); //  ,     let ball = map.querySelector('.map__cell_content_ball'); //       let nextBall = getNextCell(map, ball, direction); //      ball.classList.remove('map__cell_content_ball'); ball.classList.add('map__cell_content_empty'); //     ,            while ( !nextBall.classList.contains('map__cell_content_wall') && !ball.classList.contains('map__cell_content_exit') ) { ball = nextBall; nextBall = getNextCell(map, ball, direction); } //      ball.classList.remove('map__cell_content_empty'); ball.classList.add('map__cell_content_ball'); }); const DIRECTIONS = { 'left': [-1, 0], 'up': [0, -1], 'down': [0, 1], 'right': [1, 0] }; //  DOM API ,        function getNextCell(map, cell, direction) { const directionDiff = DIRECTIONS[direction]; return map.rows[cell.parentNode.rowIndex + directionDiff[1]].cells[cell.cellIndex + directionDiff[0]]; } 

тАФ 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 = //     const sizes = getAllSizes(); //      // board тАФ    //   тАФ   ,   //  ,    const board = []; //    function placeNext(remains) { //    ... if (remains === 0) { // ... ,   ,   return board; } else { // ... //         // ,     const pos = getEmptyPos(); //        for (let i = 0; i < sizes.length; i++) { //  ,    const size = sizes[i]; //          //     (      //     !== 1),  null const layer = getLayer(pos, size); //     if (layer) { //     board.push(layer); //     const res = placeNext(remains - 1); //  ,  if (res) return res; //      //    board.pop(); } } } } //   return placeNext(n); } 

12. -



X . VCS , .

, -. тАФ , .

, . , , . .

, . ( ) .

.



. тАФ 1000, - тАФ 20.

:

 type PullRequest = { /** *     ( ) *   N: 1 <= N <= 1000 */ files: string[], /** *     VCS */ id: string, /** * Unix-timestamp  - */ created: number, } 

(created) (id) тАУ .



CommonJS- :

 /** * @param {PullRequest[]} pullRequests  PR,     * @returns {string[]}      */ module.exports = function (pullRequests) { //   } 



NodeJS v9.11.2. .



 function mergeAllPRs(prs) { /* solution */ } 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);  } } /** *     PR (    ) */ function doPRsConflict(pr1, pr2) {  const i = prToIndex.get(pr1);  const j = prToIndex.get(pr2);  return conflictMatrix[i * prs.length + j] === 1; } 

┬л┬╗ , . ( ) , . , , - .

, , .

 /** *     prsSet,           */ 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++;  //  ,            //   ,      const safeToMergePRs = getNonConflictingPRs(prsSet, mergedPrs);  mergedPrs = mergedPrs.concat(safeToMergePRs);  safeToMergePRs.forEach((pr) => {      prsSet.delete(pr);      mergedFilesCount += pr.files.length;  });  const pr = prsSet.values().next().value; // ...      

.

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


All Articles