рдЬреАрдПрд╕рдУрд╕реА 2019: рджреНрд╡рд┐рджрд▓реАрдпрддрд╛ рдФрд░ рдореЛрдирдб рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд╝ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛

рдкрд┐рдЫрд▓реА рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рдерд╛ рд╕рдВрд╣рд┐рддрд╛ рдХреА рдЧреВрдЧрд▓ рд╕рдорд░ - Google рдХреА рдУрд░ рд╕реЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдоред рд╣рд░ рд╕рд╛рд▓, рдЖрдпреЛрдЬрдХ рдХрдИ рдУрдкрди рд╕реЛрд░реНрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдРрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рд╕рдВрдЧрдарди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ Boost.org ╨╕ рд▓рд┐рдирдХреНрд╕ рдлрд╛рдЙрдВрдбреЗрд╢рди. Google рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреБрдирд┐рдпрд╛ рднрд░ рд╕реЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред 

Google Summer of Code 2019 рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рднрд╛рдЧреА рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рднреАрддрд░ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рд╢реИрд╡рд╛рд▓ рд╕рдВрдЧрдарди рдХреЗ рд╕рд╛рде рд╣рд╛рд╕реНрдХреЗрд▓.рдУрдЖрд░рдЬреА, рдЬреЛ рд╣рд╛рд╕реНрдХреЗрд▓ рднрд╛рд╖рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ - рд╕рдмрд╕реЗ рдкреНрд░рд╕рд┐рджреНрдз рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХред рд╢реИрд╡рд╛рд▓ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рд╕реБрд░рдХреНрд╖рд┐рдд рдЯрд╛рдЗрдк рдХрд░реЗрдВ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЕрд░реНрде - рдПрдХ рдЬреАрдердм рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬреЛ рдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдЯреНрд░реА, рдХреЙрд▓ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ рдЧреНрд░рд╛рдлрд╝ рдмрдирд╛рддреА рд╣реИ рдФрд░ рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреА рд╣реИред рдореЗрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрд╕ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рджреНрд╡рд┐рджрд▓реАрдп рдЧреНрд░рд╛рдлрд╝ рдФрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░-рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЬреЛрдбрд╝рдирд╛ рдерд╛ред 

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

рдЬреАрдПрд╕рдУрд╕реА 2019: рджреНрд╡рд┐рджрд▓реАрдпрддрд╛ рдФрд░ рдореЛрдирдб рдЯреНрд░рд╛рдВрд╕рдлрд╛рд░реНрдорд░ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд╝ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛

рдореЗрд░реЗ рдмрд╛рд░реЗ рдореЗрдВ

рдореЗрд░рд╛ рдирд╛рдо рд╡рд╛рд╕рд┐рд▓реА рдЕрд▓реНрдлреЗрд░реЛрд╡ рд╣реИ, рдореИрдВ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдПрдЪрдПрд╕рдИ рдореЗрдВ рдЪреМрдереЗ рд╡рд░реНрд╖ рдХрд╛ рдЫрд╛рддреНрд░ рд╣реВрдВред рдкрд╣рд▓реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛ рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ ╨╕ рдЬрд╝реНрдпреВрд░реАрд╣реИрдХ рдХреА рдпрд╛рддреНрд░рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ. рдЕрднреА рдореИрдВ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдкрд░ рд╣реВрдВ рдмрд░реНрдЧреЗрди рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдиреЙрд░реНрд╡реЗ рдореЗрдВ, рдЬрд╣рд╛рдВ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╕реВрдЪреА рд░рдВрдЧ. рдореЗрд░реА рд░реБрдЪрд┐рдпреЛрдВ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛

рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЛ рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣рд╛рд╕реНрдХреЗрд▓ рдХреА рдЧрд░реНрдореА. рдпрд╣ рд▓реЗрдЦ рдПрдХ рдЕрдиреБрд╡рд╛рдж рд╣реИ рд▓реЗрдЦ, рдЬреЛ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЬреБрд▓рд╛рдИ рдореЗрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред 

рдкреНрд░рд╢реНрдирдЧрдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╣рд╛рдВ.

рдЖрдк рдореЗрд░реЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ) рдпрд╣рд╛рдВ.

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

рджреНрд╡рд┐рдкрдХреНрд╖реАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд╛рдлрд╝ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ 

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

рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╡рд░рдг: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдмрд╛рдПрдВ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдХреБрдЫ рд╢реАрд░реНрд╖ рдбрд╛рд▓рддреЗ рд╣реИрдВред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рд╢реАрд░реНрд╖ рдХреЗ рд╕рднреА рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рджрд╛рдПрдБ рд▓реЛрдм рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рд╢реАрд░реНрд╖ рдХреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рд╕рднреА рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рдмрд╛рдПрдВ рд▓реЛрдм рдореЗрдВ рдЭреВрда рдмреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕реА рддрд░рд╣ред рд╣рдо рддрдм рддрдХ рд╢реАрд░реНрд╖реЛрдВ рдХреЛ рд╢реЗрдпрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ, рдЬрдм рддрдХ рдХрд┐ рдЬрд┐рд╕ рд╢реАрд░реНрд╖ рд╕реЗ рд╣рдордиреЗ рд╢реБрд░реБрдЖрдд рдХреА рдереА, рдЙрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рдШрдЯрдХ рдореЗрдВ рдЕрднреА рднреА рд╢реАрд░реНрд╖ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рд╕реМрдВрдкрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рд╕рднреА рдЬреБрдбрд╝реЗ рд╣реБрдП рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВред

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

рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдкрд╣рд▓реЗ рдЪреМрдбрд╝рд╛рдИ рдЦреЛрдЬреЛ рдпрд╛ рдЧрд╣рд░рд╛рдИ рдкрд╣рд▓реА рдЦреЛрдЬ. рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдЧрд╣рд░рд╛рдИ-рдкрд╣рд▓реА рдЦреЛрдЬ рдХрд╛ рдЖрдорддреМрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рд░рд▓ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдореИрдВрдиреЗ рдЧрд╣рд░рд╛рдИ-рдкрд╣рд▓реА рдЦреЛрдЬ рдХреЛ рднреА рдЪреБрдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╣реИред

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

рдЧрдгрдирд╛ рдХреА рд╢реБрджреНрдзрддрд╛

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

рдореЛрдиреИрдбреНрд╕ рдЧрдгрдирд╛рдУрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдкреНрд░рднрд╛рд╡ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ. рдпрд╣ рдмрддрд╛рдирд╛ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╡рд░рдг рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╣рд╛рдВ.

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

рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рднрд╛рд╡ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рдиреНрджреЗрд╢ рд╣реИред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдордЬрдмреВрдд рдФрд░ рд╕реБрдВрджрд░ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИ: рд╕рднреА рднрд┐рдХреНрд╖реБ рдПрдХ рд╣реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреАрди рд╕рдиреНрдпрд╛рд╕рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ:

  • рдпрд╛ рддреЛ ea рдПрдХ рдЧрдгрдирд╛ рд╣реИ рдЬреЛ рдкреНрд░рдХрд╛рд░ a рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИ рдпрд╛ рдкреНрд░рдХрд╛рд░ e рдХрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддреА рд╣реИред рдЗрд╕ рд╕рдиреНрдпрд╛рд╕реА рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЕрдкрд╡рд╛рдж рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рдорд╛рди рд╣реИ: рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рд╛ рдпрд╛ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореЛрдирд╛рдб рдХреЛ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛рдПрдВ рдЖрдорддреМрд░ рдкрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред
  • рд░рд╛рдЬреНрдп рдПрд╕рдП рдПрдХ рдЧрдгрдирд╛ рд╣реИ рдЬреЛ рдкреНрд░рдХрд╛рд░ рдП рдХрд╛ рдорд╛рди рд▓реМрдЯрд╛рддреА рд╣реИ рдФрд░ рдкреНрд░рдХрд╛рд░ рдПрд╕ рдХреА рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕реНрдерд┐рддрд┐ рддрдХ рдкрд╣реБрдВрдЪ рд░рдЦрддреА рд╣реИред
  • рд╢рд╛рдпрдж рдПрдХред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдореЛрдиреИрдб рдПрдХ рдЧрдгрдирд╛ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдордп рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рдХрд░ рдмрд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдореЛрдирд╛рдбрдкреНрд▓рд╕ рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╡рд┐рдкрд░реАрдд рдкреНрд░рднрд╛рд╡ рд╡реНрдпрдХреНрдд рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдПрдХ рдЧрдгрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рд╕рдордп рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рди рд▓реМрдЯрд╛рдХрд░ рдмрд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

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

рдпреЗ рд╢реИрд╡рд╛рд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рд╢реИрд╡рд╛рд▓ рдХреЗ рдкрд╛рд╕ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рджреНрд╡рд┐рджрд▓реАрдп рдЧреНрд░рд╛рдлрд╝ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПред

рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рд╡рд╛рд▓реЗ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

-- ╨б╨┐╨╕╤Б╨╛╨║ ╤Б╨╛╤Б╨╡╨┤╨╡╨╣ ╨┤╨░╨╜╨╜╨╛╨╣ ╨▓╨╡╤А╤И╨╕╨╜╤Л.
neighbours :: Ord a => a -> Graph a -> [a]

-- ╨Я╨╛╤Б╤В╤А╨╛╨╕╤В╤М ╨┤╨▓╤Г╨┤╨╛╨╗╤М╨╜╤Л╨╣ ╨│╤А╨░╤Д ╨┐╨╛ ╨│╤А╨░╤Д╤Г ╨╕ ╤Д╤Г╨╜╨║╤Ж╨╕╨╕, ╨┤╨╗╤П ╨║╨░╨╢╨┤╨╛╨╣ ╨▓╨╡╤А╤И╨╕╨╜╤Л
-- ╨▓╤Л╨┤╨░╤О╤Й╨╡╨╣ ╨╡╤С ╨┤╨╛╨╗╤О ╨╕ ╨┐╨╛╨╝╨╡╤В╨║╤Г ╨▓ ╨╜╨╛╨▓╨╛╨╣ ╨┤╨╛╨╗╨╡, ╨╕╨│╨╜╨╛╤А╨╕╤А╤Г╤П ╨║╨╛╨╜╤Д╨╗╨╕╨║╤В╨╜╤Л╨╡ ╤А╤С╨▒╤А╨░.
toBipartiteWith :: (Ord a, Ord b, Ord c) => (a -> Either b c)
                                         -> Graph a
                                         -> Bigraph b c

-- ╨б╨┐╨╕╤Б╨╛╨║ ╨▓╨╡╤А╤И╨╕╨╜ ╨▓ ╨│╤А╨░╤Д╨╡
vertexList :: Ord a => Graph a -> [a]
╨б╨╕╨│╨╜╨░╤В╤Г╤А╨░ ╤Д╤Г╨╜╨║╤Ж╨╕╨╕, ╨║╨╛╤В╨╛╤А╤Г╤О ╨╝╤Л ╨▒╤Г╨┤╨╡╨╝ ╨┐╨╕╤Б╨░╤В╤М, ╨▓╤Л╨│╨╗╤П╨┤╨╕╤В ╤В╨░╨║:

type OddCycle a = [a]
detectParts :: Ord a => Graph a -> Either (OddCycle a) (Bigraph a a)

рдпрд╣ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрджрд┐ рдЧрд╣рд░рд╛рдИ-рдкрд╣рд▓реА рдЦреЛрдЬ рдХреЗ рджреМрд░рд╛рди рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рдХрд┐рдирд╛рд░рд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рд╖рдо рдЪрдХреНрд░ рд░рд┐рдХрд░реНрд╕рди рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд░рд┐рдХрд░реНрд╕рди рд╕реНрдЯреИрдХ рд╕реЗ рд▓реЗрдХрд░ рдЕрдВрддрд┐рдо рд╢реАрд░реНрд╖ рдХреА рдкрд╣рд▓реА рдШрдЯрдирд╛ рддрдХ рд╕рдм рдХреБрдЫ рдХрд╛рдЯ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред

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

рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╛ рддреЛ рдореЛрдирдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдерд╛, рдЬреЛ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдкрд╣рд▓рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдкрд╛рдВрдЪ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдереЗ рдФрд░ рдЕрдВрддрддрдГ рдореИрдВ рджреВрд╕рд░реЗ рдкрд░ рд░реБрдХ рдЧрдпрд╛ред

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

рдореИрдВрдиреЗ рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдкреНрд░рдХрд╛рд░ рдХреНрдпреЛрдВ рдЪреБрдирд╛? рджреЛ рдХрд╛рд░рдгред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрдирд┐рд╡рд╛рд░реНрдпрддрд╛ рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реЛрддрд╛ рд╣реИред рджреВрд╕рд░рд╛, рд╣рдореЗрдВ рд╡рд┐рд╖рдо рд▓реВрдк рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдХрд░реНрд╕рди рд╕реЗ рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╕рдордп рд╕рдВрдШрд░реНрд╖ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╢рд╛рдпрдж рдореЛрдирд╛рдб рдореЗрдВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдореЗрдВ рдпрд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред

{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE ScopedTypeVariables #-}

data Part = LeftPart | RightPart

otherPart :: Part -> Part
otherPart LeftPart  = RightPart
otherPart RightPart = LeftPart

type PartMap a = Map.Map a Part
type OddCycle a = [a]

toEither :: Ord a => PartMap a -> a -> Either a a
toEither m v = case fromJust (v `Map.lookup` m) of
                    LeftPart  -> Left  v
                    RightPart -> Right v

type PartMonad a = MaybeT (State (PartMap a)) [a]

detectParts :: forall a. Ord a => Graph a -> Either (OddCycle a) (Bigraph a a)
detectParts g = case runState (runMaybeT dfs) Map.empty of
                     (Just c, _)  -> Left  $ oddCycle c
                     (Nothing, m) -> Right $ toBipartiteWith (toEither m) g
    where
        inVertex :: Part -> a -> PartMonad a
        inVertex p v = ((:) v) <$> do modify $ Map.insert v p
                                      let q = otherPart p
                                      msum [ onEdge q u | u <- neigbours v g ]

        {-# INLINE onEdge #-}
        onEdge :: Part -> a -> PartMonad a
        onEdge p v = do m <- get
                        case v `Map.lookup` m of
                             Nothing -> inVertex p v
                             Just q  -> do guard (q /= p)
                                           return [v]

        processVertex :: a -> PartMonad a
        processVertex v = do m <- get
                             guard (v `Map.notMember` m)
                             inVertex LeftPart v

        dfs :: PartMonad a
        dfs = msum [ processVertex v | v <- vertexList g ]

        oddCycle :: [a] -> [a]
        oddCycle c = tail (dropWhile ((/=) last c) c)

рд╡реНрд╣реЗрдпрд░ рдмреНрд▓реЙрдХ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рдореВрд▓ рд╣реИред рдореИрдВ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ.

  • рдЗрдирд╡рд░реНрдЯреЗрдХреНрд╕ рдбреЗрдкреНрде-рдлрд░реНрд╕реНрдЯ рд╕рд░реНрдЪ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рд╡рд░реНрдЯреЗрдХреНрд╕ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдо рд╡рд░реНрдЯреЗрдХреНрд╕ рдХреЛ рдПрдХ рд╢реЗрдпрд░ рдирдВрдмрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдкрд░ рдСрдирдПрдЬ рдЪрд▓рд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рднреА рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ: рдпрджрд┐ рдПрдорд╕реБрдо рдиреЗ рдХреЛрдИ рдорд╛рди рд▓реМрдЯрд╛рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╡рд╣рд╛рдВ рд╡рд░реНрдЯреЗрдХреНрд╕ рд╡реА рджрдмрд╛рддреЗ рд╣реИрдВред
  • рдСрдирдПрдЬ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдХрд┐рдирд╛рд░реЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рдирд╛рд░реЗ рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рджреВрд╕рд░реА рддрд░рдл рдХреЗ рд╢рд┐рдЦрд░ рдХрд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ рддреЛ рд╡рд╣рд╛рдВ рдХрд╛ рджреМрд░рд╛ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рдирд╛рд░рд╛ рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдо рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ - рд░рд┐рдХрд░реНрд╕рди рд╕реНрдЯреИрдХ рдХреЗ рдмрд┐рд▓реНрдХреБрд▓ рд╢реАрд░реНрд╖ рдкрд░, рдЬрд╣рд╛рдВ рд╡рд╛рдкрд╕реА рдкрд░ рдЕрдиреНрдп рд╕рднреА рдХреЛрдиреЗ рд░рдЦреЗ рдЬрд╛рдПрдВрдЧреЗред
  • рдкреНрд░реЛрд╕реЗрд╕рд╡рд░реНрдЯреЗрдХреНрд╕ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрд╕ рдкрд░ рджреМрд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдирд╣реАрдВ рддреЛ рдЙрд╕ рдкрд░ рдЗрдирд╡рд░реНрдЯреЗрдХреНрд╕ рдЪрд▓рддрд╛ рд╣реИред
  • dfs рд╕рднреА рд╢реАрд░реНрд╖реЛрдВ рдкрд░ рдкреНрд░реЛрд╕реЗрд╕рд╡рд░реНрдЯреЗрдХреНрд╕ рдЪрд▓рд╛рддрд╛ рд╣реИред

рдмрд╕ рдЗрддрдирд╛ рд╣реАред

рдЗрдирд▓рд╛рдЗрди рд╢рдмреНрдж рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕

INLINE рд╢рдмреНрдж рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХреЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд╣реАрдВ рдерд╛; рдпрд╣ рдмрд╛рдж рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдпрд╛ред рдЬрдм рдореИрдВрдиреЗ рдмреЗрд╣рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рддреЛ рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЧреИрд░-рдЗрдирд▓рд╛рдЗрди рд╕рдВрд╕реНрдХрд░рдг рдХреБрдЫ рдЧреНрд░рд╛рдлрд╝ рдкрд░ рдХрд╛рдлрд╝реА рдзреАрдорд╛ рдерд╛ред рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рд╢рдмреНрджрд╛рд░реНрде рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдмрд╣реБрдд рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЬреАрдм рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЬреАрдПрдЪрд╕реА рдХреЗ рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдг рд╡рд╛рд▓реА рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╢реАрди рдкрд░ рдХреЛрдИ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЕрдВрддрд░ рдирд╣реАрдВ рдерд╛ред

рдЬреАрдПрдЪрд╕реА рдХреЛрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдПрдХ рд╕рдкреНрддрд╛рд╣ рдмрд┐рддрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдЗрдирд▓рд╛рдЗрди рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдЬреАрдПрдЪрд╕реА 8.4.4 рдФрд░ рдЬреАрдПрдЪрд╕реА 8.6.5 рдХреЗ рдмреАрдЪ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдиреЗ рдЕрдкрдиреЗ рдЖрдк рдРрд╕рд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред

рдореБрдЭреЗ рд╣рд╛рд╕реНрдХреЗрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдРрд╕реА рдЧрдВрджрдЧреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдЬ рднреА, рдЕрдиреБрдХреВрд▓рдХ рдХрднреА-рдХрднреА рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рд╣рдорд╛рд░рд╛ рдХрд╛рдо рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдирд▓рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЗрдирд▓рд╛рдЗрди рд╣реИ, рдФрд░ рдпрд╣ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рд╣реИред

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реБрдЖ?

рдлрд┐рд░ рдореИрдВрдиреЗ рд╣реЙрдкрдХреНрд░реЙрдлреНрдЯ-рдХрд╛рд░реНрдк рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЕрдиреНрдп рднрд┐рдХреНрд╖реБрдУрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдФрд░ рд╡рд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдЕрдВрдд рдерд╛ред

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

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ