рд╕рд┐рд░реНрдл рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдирдорд╕реНрдХрд╛рд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛рдУрдВ! рдореИрдВ рдШреЛрд╖рдгрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдХреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рд░рдЦреВрдВрдЧрд╛, рдореИрдВ рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛, рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдФрд░ рдЙрдирдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рдирдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВред


рдЯрд╛рд╕реНрдХ 391. рдкрд░рдлреЗрдХреНрдЯ рдЖрдпрдд


N рдЕрдХреНрд╖-рд╕рдВрд░реЗрдЦрд┐рдд рдЖрдпрддреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЬрд╣рд╛рдБ N> 0, рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рд╕рднреА рдорд┐рд▓рдХрд░ рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдПрдХ рд╕рдЯреАрдХ рдЖрд╡рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдЖрдпрдд рдХреЛ рдиреАрдЪреЗ-рдмрд╛рдПрдБ рдмрд┐рдВрджреБ рдФрд░ рд╢реАрд░реНрд╖-рджрд╛рдПрдБ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдХреЛ [1,1,2,2] рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред (рдиреАрдЪреЗ-рдмрд╛рдПрдБ рдмрд┐рдВрджреБ рдХрд╛ рд╕рдордиреНрд╡рдп рд╣реИ (1, 1) рдФрд░ рд╢реАрд░реНрд╖-рджрд╛рдПрдБ рдмрд┐рдВрджреБ рд╣реИ (2, 2))ред
рдЫрд╡рд┐
рдЙрджрд╛рд╣рд░рдг 1: рдЖрдпрддрд╛рдХрд╛рд░ = [
[1,1,3,3]
[3,1,4,2]
[3,2,4,4]
[1,3,2,4]
[2,3,3,4]]
рд╕рдЪ рд▓реМрдЯрд╛ рджреЛред рд╕рднреА 5 рдЖрдпрддрд╛рдХрд╛рд░ рдорд┐рд▓рдХрд░ рдПрдХ рдЖрдпрддрд╛рдХрд╛рд░ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдПрдХ рд╕рдЯреАрдХ рдЖрд╡рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВред
...
рдЙрджрд╛рд╣рд░рдг 3: рдЖрдпрдд =
[[1,1,3,3]
[3,1,4,2]
[1,3,2,4]
[3,2,4,4]]
рдЭреВрдареЗ рд▓реМрдЯреЗред рдХреНрдпреЛрдВрдХрд┐ рд╢реАрд░реНрд╖ рдХреЗрдВрджреНрд░ рдореЗрдВ рдЕрдВрддрд░рд╛рд▓ рд╣реИред

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


рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕реВрдЪреА рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдЖрдкрдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ, рд╕реВрдЪреА [рд╣реЗрдб | рдЯреЗрд▓] рд╣реИ, рдЬрд╣рд╛рдВ рдЯреЗрд▓ рдПрдХ рд╕реВрдЪреА рд╣реИ, рд╕реВрдЪреА рднреА рдЦрд╛рд▓реА рд╣реИ [] ред


рд╣рдо 1 рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ


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


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


рдЗрд╕ рддрд░рд╣:


findsum([], Sres,Sres,LConerRes,LConerRes,RConerRes,RConerRes,_). findsum([[Lx,Ly,Rx,Ry]|T], Scur,Sres,LConerCur,LConerRes,RConerCur,RConerRes,RectList):- mincon(Lx:Ly,LConerCur,LConerCur2), maxcon(Rx:Ry,RConerCur,RConerCur2), Scur2 is Scur+(Rx-Lx)*(Ry-Ly), not(chekin([Lx,Ly,Rx,Ry],RectList)), findsum(T, Scur2,Sres,LConerCur2,LConerRes,RConerCur2,RConerRes,[[Lx,Ly,Rx,Ry]|RectList]). 

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


рддреЛ:


 %   mincon(X1:Y1,X2:Y2,X1:Y1):-X1=<X2,Y1=<Y2,!. mincon(_,X2:Y2,X2:Y2). %  maxcon(X1:Y1,X2:Y2,X1:Y1):-X1>=X2,Y1>=Y2,!. maxcon(_,X2:Y2,X2:Y2). 

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


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


 %    chekin(X,[R|_]):-cross(X,R),!. chekin(X,[_|T]):-chekin(X,T). %     ,    cross(X,X):-!. cross(X,Y):-cross2(X,Y),!. cross(X,Y):-cross2(Y,X). %,       cross2([X11,Y11,X12,Y12],[X21,Y21,X22,Y22]):-X11<X22,X22=<X12,Y11<Y22,Y22=<Y12,!.%rt cross2([X11,Y11,X12,Y12],[X21,Y21,X22,Y22]):-X11=<X21,X21<X12,Y11<Y22,Y22=<Y12,!.%lt cross2([X11,Y11,X12,Y12],[X21,Y21,X22,Y22]):-X11<X22,X22=<X12,Y11=<Y21,Y21<Y12,!.%rb cross2([X11,Y11,X12,Y12],[X21,Y21,X22,Y22]):-X11=<X21,X21<X12,Y11=<Y21,Y21<Y12. %lb 

рдЖрдпрддреЛрдВ рдХрд╛ рдЪреМрд░рд╛рд╣рд╛, рдпреЗ рдЪрд╛рд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреЛ рдкрд╣рд▓реЗ рдХреЗ рд╢реАрд░реНрд╖ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рдЕрдВрджрд░ рдорд╛рд░рддреЗ рд╣реИрдВред


рдФрд░ рдЕрдВрддрд┐рдо рдмрдпрд╛рди:


 isRectangleCover(Rects):- [[Lx,Ly,Rx,Ry]|_]=Rects, findsum(Rects,0,S,Lx:Ly,LconerX:LconerY,Rx:Ry,RconerX:RconerY,[]),!, S=:= (RconerX-LconerX)*(RconerY-LconerY). 

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


рдЕрдЧрд▓рд╛, рдореИрдВ рдЗрд╕ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдореМрдЬреВрджрд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдкрд╣рд▓реЗ 40 рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рддрд╛ рд╣реВрдВ:


 %unit-tests framework assert_are_equal(Goal, false):-get_time(St),not(Goal),!,get_time(Fin),Per is round(Fin-St),writeln(Goal->ok:Per/sec). assert_are_equal(Goal, true):- get_time(St),Goal, !,get_time(Fin),Per is round(Fin-St),writeln(Goal->ok:Per/sec). assert_are_equal(Goal, Exp):-writeln(Goal->failed:expected-Exp). :-assert_are_equal(isRectangleCover([[1,1,3,3],[3,1,4,2],[3,2,4,4],[1,3,2,4],[2,3,3,4]]),true). :-assert_are_equal(isRectangleCover([[1,1,2,3],[1,3,2,4],[3,1,4,2],[3,2,4,4]]),false). :-assert_are_equal(isRectangleCover([[1,1,3,3],[3,1,4,2],[1,3,2,4],[3,2,4,4]]),false). :-assert_are_equal(isRectangleCover([[1,1,3,3],[3,1,4,2],[1,3,2,4],[2,2,4,4]]),false). :-assert_are_equal(isRectangleCover([[0,0,4,1],[0,0,4,1]]),false). 

рдФрд░ рдЕрдзрд┐рдХ ...
 :-assert_are_equal(isRectangleCover([[0,0,4,1],[7,0,8,2],[6,2,8,3],[5,1,6,3],[4,0,5,1],[6,0,7,2],[4,2,5,3],[2,1,4,3],[0,1,2,2],[0,2,2,3],[4,1,5,2],[5,0,6,1]]),true). :-assert_are_equal(isRectangleCover([[0,0,4,1],[7,0,8,2],[5,1,6,3],[6,0,7,2],[4,0,5,1],[4,2,5,3],[2,1,4,3],[0,2,2,3],[0,1,2,2],[6,2,8,3],[5,0,6,1],[4,1,5,2]]),true). :-assert_are_equal(isRectangleCover([[0,0,4,1]]),true). :-assert_are_equal(isRectangleCover([[0,0,3,3],[1,1,2,2]]),false). :-assert_are_equal(isRectangleCover([[1,1,2,2],[1,1,2,2],[2,1,3,2]]),false). :-assert_are_equal(isRectangleCover([[0,0,1,1],[0,1,3,2],[1,0,2,2]]),false). :-assert_are_equal(isRectangleCover([[0,0,1,1],[0,1,1,2],[0,2,1,3],[0,3,1,4]]),true). :-assert_are_equal(isRectangleCover([[0,0,1,1],[1,0,2,1],[2,0,3,1],[3,0,4,1]]),true). :-assert_are_equal(isRectangleCover([[0,0,2,2],[1,1,3,3],[2,0,3,1],[0,3,3,4]]),false). :-assert_are_equal(isRectangleCover([[0,0,3,1],[0,1,2,3],[1,0,2,1],[2,2,3,3]]),false). :-assert_are_equal(isRectangleCover([[1,1,3,3],[2,2,4,4],[4,1,5,4],[1,3,2,4]]),false). :-assert_are_equal(isRectangleCover([[0,0,1,1],[0,0,2,1],[1,0,2,1],[0,2,2,3]]),false). :-assert_are_equal(isRectangleCover([[0,0,2,1],[0,1,2,2],[0,2,1,3],[1,0,2,1]]),false). :-assert_are_equal(isRectangleCover([[1,1,2,2],[0,1,1,2],[1,0,2,1],[0,2,3,3],[2,0,3,3]]),false). :-assert_are_equal(isRectangleCover([[0,0,4,1],[7,0,8,2],[6,2,8,3],[5,1,6,3],[6,0,7,2],[4,2,5,3],[2,1,4,3],[0,1,2,2],[0,2,2,3],[4,1,5,2],[5,0,6,1]]),false). :-assert_are_equal(isRectangleCover([[0,0,4,1],[7,0,8,2],[5,1,6,4],[6,0,7,2],[4,0,5,1],[4,2,5,3],[2,1,4,3],[0,2,2,3],[0,1,2,2],[6,2,8,3],[5,0,6,1],[4,1,5,2]]),false). :-assert_are_equal(isRectangleCover([[0,0,4,1],[7,0,8,3],[5,1,6,3],[6,0,7,2],[4,0,5,1],[4,2,5,3],[2,1,4,3],[0,2,2,3],[0,1,2,2],[6,2,8,3],[5,0,6,1],[4,1,5,2]]),false). :-assert_are_equal(isRectangleCover([[0,0,5,1],[7,0,8,2],[5,1,6,3],[6,0,7,2],[4,0,5,1],[4,2,5,3],[2,1,4,3],[0,2,2,3],[0,1,2,2],[6,2,8,3],[5,0,6,1],[4,1,5,2]]),false). :-assert_are_equal(isRectangleCover([[0,0,1,1],[0,0,1,1],[0,2,1,3]]),false). :-assert_are_equal(isRectangleCover([[0,0,3,3],[1,1,2,2],[1,1,2,2]]),false). :-assert_are_equal(isRectangleCover([[1,1,4,4],[1,3,4,5],[1,6,4,7]]),false). :-assert_are_equal(isRectangleCover([[0,0,3,1],[0,1,2,3],[2,0,3,1],[2,2,3,3]]),false). :-assert_are_equal(isRectangleCover([[0,0,1,1],[0,0,1,1],[1,1,2,2],[1,1,2,2]]),false). :-assert_are_equal(isRectangleCover([[1,1,2,2],[1,1,2,2],[1,1,2,2],[2,1,3,2],[2,2,3,3]]),false). :-assert_are_equal(isRectangleCover([[1,1,2,2],[2,1,3,2],[2,1,3,2],[2,1,3,2],[3,1,4,2]]),false). :-assert_are_equal(isRectangleCover([[0,1,2,3],[0,1,1,2],[2,2,3,3],[1,0,3,1],[2,0,3,1]]),false). :-assert_are_equal(isRectangleCover([[0,0,1,1],[0,2,1,3],[1,1,2,2],[2,0,3,1],[2,2,3,3],[1,0,2,3],[0,1,3,2]]),false). :-assert_are_equal(isRectangleCover([[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[0,0,1,1],[2,2,3,3]]),false). :-assert_are_equal(isRectangleCover([[0,0,1,1],[0,1,1,2],[0,2,1,3],[1,0,2,1],[1,0,2,1],[1,2,2,3],[2,0,3,1],[2,1,3,2],[2,2,3,3]]),false). :-assert_are_equal(isRectangleCover([[0,0,4,1],[7,0,8,2],[5,1,6,3],[6,0,7,2],[2,1,4,3],[0,2,2,3],[0,1,2,2],[6,2,8,3],[5,0,6,1]]),false). :-assert_are_equal(isRectangleCover([[0,0,4,1],[7,0,8,2],[5,1,6,3],[6,0,7,2],[4,0,5,1],[4,2,5,3],[2,1,4,3],[-1,2,2,3],[0,1,2,2],[6,2,8,3],[5,0,6,1],[4,1,5,2]]),false). :-assert_are_equal(isRectangleCover([[0,0,1,1],[1,0,2,1],[1,0,3,1],[3,0,4,1]]),false). :-assert_are_equal(isRectangleCover([[1,2,4,4],[1,0,4,1],[0,2,1,3],[0,1,3,2],[3,1,4,2],[0,3,1,4],[0,0,1,1]]),true). 

рдФрд░ рдпрд╣ рдЕрдВрдд рдирд╣реАрдВ рд╣реИ, "рдХрдард┐рди" рдЦрдВрдб рд╕реЗ рдХрд╛рд░реНрдп, 41 рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╡реЗ 10,000 рдЖрдпрддреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдкрд┐рдЫрд▓реЗ рдкрд╛рдВрдЪ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдореБрдЭреЗ рд╕реЗрдХрдВрдб рдореЗрдВ рдРрд╕реЗ рд╕рдордп рдорд┐рд▓рддреЗ рд╣реИрдВ:


 test 41:length=10000 goal->ok:212/sec test 42:length=3982 goal->ok:21/sec test 43:length=10222 goal->ok:146/sec test 44:length=10779 goal->ok:41/sec test 45:length=11000 goal->ok:199/sec 

рдореИрдВ рдЗрдирдкреБрдЯ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рд▓рд╛ рд╕рдХрддрд╛, рд╡реЗ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг 41 рд╕рдВрд▓рдЧреНрди рдХрд░реВрдВрдЧрд╛ред


рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ 2


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


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


рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрд░рд┐рдкрд▓ рдлрд╝рдВрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ: t (LeftTree, RootValue, RightTree), рдФрд░ рдЦрд╛рд▓реА рдкреЗрдбрд╝ рд╣реЛрдЧрд╛ []ред


рдмрд╛рдИрдВ рдУрд░ рдСрд░реНрдбрд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд░рд▓ рдкреЗрдбрд╝ рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдмрдбрд╝рд╛ рд╣реИ, рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


 add_to_tree(X,[],t([],X,[])). add_to_tree(X,t(L,Root,R),t(L,Root,NewR)):- X<Root,!,add_to_tree(X,R,NewR). add_to_tree(X,t(L,Root,R),t(NewL,Root,R)):- add_to_tree(X,L,NewL). 

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


рдореИрдВ рдЖрдпрддреЛрдВ рдХреЗ рдЖрджреЗрд╢ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ: рдпрджрд┐ рдЖрдпрдд рджреВрд╕рд░реЗ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╣реИ, рддреЛ рд╡реЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬреЛ рдмрд╛рдИрдВ рдУрд░ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдЪреМрд░рд╛рд╣реЗ рдХреЗ рд▓рд┐рдП рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рджрд╛рдИрдВ рдУрд░, рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдХрд╛ рджрд╛рдпрд╛рдВ рдХреЛрдирд╛ рджреВрд╕рд░реЗ рдХреЗ рдмрд╛рдПрдВ рдХреЛрдиреЗ рд╕реЗ рдХрдо рд╣реЛрддрд╛ рд╣реИ:


 righter([X1,_,_,_],[_,_,X2,_]):-X1>X2. 

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


 treechk(X,[],t([],X,[])). treechk([X1,Y1,X2,Y2],t(L,[X1,Y11,X2,Y22],R),t(L,[X1,Yr,X2,Yr2],R)):- (Y1=Y22;Y2=Y11),!,Yr is min(Y1,Y11),Yr2 is max(Y2,Y22). %union treechk(X,t(L,Root,R),t(L,Root,NewR)):- righter(X,Root),!,treechk(X,R,NewR). treechk(X,t(L,Root,R),t(NewL,Root,R)):- not(cross(X,Root)),treechk(X,L,NewL). 

рддреБрд░рдВрдд рджреВрд╕рд░реЗ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рдЪрд╛рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛, рдпрджрд┐ рдЖрдпрдд рд╕рдорд╛рди рдЪреМрдбрд╝рд╛рдИ рдХреА рд╣реИ, рдФрд░ рдПрдХ рдЖрдо рдЪреЗрд╣рд░рд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреЗрдбрд╝ рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ рдПрдХ рдиреЛрдб рдореЗрдВ рдЖрдпрдд рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрдВред рдЯреЗрд╕реНрдЯ 41 рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреЛрд░ рджреЗ рд░рд╣рд╛ рд╣реИ, рдРрд╕рд╛ рдбреЗрдЯрд╛ рд╣реИ: [[0, -1,1,0], [0,0,1,1], [0,1,1,2], [0,2,1, 3], [0,3,1,4], [0,4,1,5], [0,5,1,6], [0,6,1,7], [0,7,1] 8], [0,8,1,9], [0,9,1,10], [0,10,1,11], [0,11,1,12], [0,12,1,] 13], [0,13,1,14], ..., [0,9998,1,9999]]ред


рд╣рдо рдЗрди рд╕реБрдзрд╛рд░реЛрдВ рдХреЛ рдкрд┐рдЫрд▓реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреЗрддрд╛ рд╣реВрдВ, рдХреБрдЫ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде:


 treechk(X,[],t([],X,[])). treechk([X1,Y1,X2,Y2],t(L,[X1,Y11,X2,Y22],R),t(L,[X1,Yr,X2,Yr2],R)):- (Y1=Y22;Y2=Y11),!,Yr is min(Y1,Y11),Yr2 is max(Y2,Y22). %union treechk(X,t(L,Root,R),t(L,Root,NewR)):- righter(X,Root),!,treechk(X,R,NewR). treechk(X,t(L,Root,R),t(NewL,Root,R)):- not(cross(X,Root)),treechk(X,L,NewL). righter([X1,_,_,_],[_,_,X2,_]):-X1>X2. findsum([],Sres,Sres,LConerRes,LConerRes,RConerRes,RConerRes,_). findsum([[Lx,Ly,Rx,Ry]|T],Scur,Sres,LConerCur,LConerRes,RConerCur,RConerRes,RectTree):- coner(Lx:Ly,LConerCur,=<,LConerCur2), coner(Rx:Ry,RConerCur,>=,RConerCur2), Scur2 is Scur+abs(Rx-Lx)*abs(Ry-Ly), treechk([Lx,Ly,Rx,Ry],RectTree,RectTree2),!, findsum(T,Scur2,Sres,LConerCur2,LConerRes,RConerCur2,RConerRes,RectTree2). isRectangleCover(Rects):- [[Lx,Ly,Rx,Ry]|_]=Rects, findsum(Rects,0,S,Lx:Ly,LconerX:LconerY,Rx:Ry,RconerX:RconerY,[]),!, S=:= abs(RconerX-LconerX)*abs(RconerY-LconerY). coner(X1:Y1,X2:Y2,Dir,X1:Y1):-apply(Dir,[X1,X2]),apply(Dir,[Y1,Y2]),!. coner(_,XY,_,XY). cross(X,X):-!. cross(X,Y):-cross2(X,Y),!. cross(X,Y):-cross2(Y,X). cross2([X11,Y11,X12,Y12],[_,_,X22,Y22]):-X11<X22,X22=<X12, Y11<Y22,Y22=<Y12,!. %right-top cross2([X11,Y11,X12,Y12],[X21,_,_,Y22]):-X11=<X21,X21<X12, Y11<Y22,Y22=<Y12,!. %left-top cross2([X11,Y11,X12,Y12],[_,Y21,X22,_]):-X11<X22,X22=<X12, Y11=<Y21,Y21<Y12,!. %right-bottom cross2([X11,Y11,X12,Y12],[X21,Y21,_,_]):-X11=<X21,X21<X12, Y11=<Y21,Y21<Y12. %left-bottom 

рдпрд╣рд╛рдБ "рднрд╛рд░реА" рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдХреНрд░рдо рд╣реИ:


 goal-true->ok:0/sec 41:length=10000 goal-true->ok:0/sec 42:length=3982 goal-true->ok:0/sec 43:length=10222 goal-true->ok:2/sec 44:length=10779 goal-false->ok:1/sec 45:length=11000 goal-true->ok:1/sec 

рдореИрдВ рдЗрд╕ рд╕реБрдзрд╛рд░ рдХреЛ рдкреВрд░рд╛ рдХрд░реВрдВрдЧрд╛, рд╕рднреА рдкрд░реАрдХреНрд╖рдг рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рд╕ рд╣реЛрдВрдЧреЗ, рд╕рдордп рд╕рдВрддреЛрд╖рдЬрдирдХ рд╣реИред рдЬреЛ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рдСрдирд▓рд╛рдЗрди рдпрд╛ рдпрд╣рд╛рдВ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ ред


рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░


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


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


рдФрд░ ... рдХрд╣реАрдВ рдкреНрд░реЛрд▓реЙрдЧ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рд╢реИрд▓рд┐рдпреЛрдВ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛, рдЖрдзреЗ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдерд╛ред рдореБрдЭреЗ "рдмрд╣рди" рдПрд░реНрд▓рд╛рдВрдЧ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдерд╛ред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ "рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛" рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реИ, рдлреЛрд░рдЯреНрд░рд╛рди рдФрд░ рдмреЗрд╕рд┐рдХ рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рднрд╛рд╖рд╛рдУрдВ рдХреА рд░реЗрдЯрд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ?

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


All Articles