рдкреНрд░реЛрд▓реЙрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

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


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


рдЕрдЧрд▓реА рд╕рдорд╕реНрдпрд╛ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░рдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрд╛, рдФрд░ рдкрд╣рд▓рд╛ рд╕рдорд╛рдзрд╛рди рдкрд╣рд▓реЗ рд╣реА рдорд┐рд▓ рдЪреБрдХрд╛ рд╣реИ, рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдзреАрдорд╛ рд╣реИред


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


рддреЛ, рдХрд╛рд░реНрдп рдпрд╣ рд╣реИ :


  1. рдмрд╛рд░рд┐рд╢ рдХреЗ рдкрд╛рдиреА рдХреЛ рдлрдБрд╕рд╛рдирд╛ ii
    2 рдбреА рдКрдВрдЪрд╛рдИ рдХреЗ рдирдХреНрд╢реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЗрдХрд╛рдИ рд╕реЗрд▓ рдХреА рдКрдВрдЪрд╛рдИ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдПрдХ рдПрдордПрдХреНрд╕рдПрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдкрд╛рдиреА рдХреА рдорд╛рддреНрд░рд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдЬреЛ рдмрд╛рд░рд┐рд╢ рдХреЗ рдмрд╛рдж рдлрдВрд╕рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
    рдзреНрдпрд╛рди рджреЗрдВ:
    рдПрдо рдФрд░ рдПрди рджреЛрдиреЛрдВ 110 рд╕реЗ рдХрдо рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдпреВрдирд┐рдЯ рд╕реЗрд▓ рдХреА рдКрдВрдЪрд╛рдИ 0 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдФрд░ 20,000 рд╕реЗ рдХрдо рд╣реИред
    рдЙрджрд╛рд╣рд░рдг:

    рдЫрд╡рд┐

    рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 3x6 рдКрдВрдЪрд╛рдИ рдХреЗ рдирдХреНрд╢реЗ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП:
    [
    [1,4,3,1,3,2]
    [3,2,1,3,2,4]
    [2,3,3,2,3,1]
    ]
    рд╡рд╛рдкрд╕реА рекред



рдПрдХ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рдВрдмреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рд╢рдмреНрдж рдкрд░ рдЖрдпрд╛:
рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдкрд╛рдиреА рдбрд╛рд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдлреИрд▓рддрд╛ рд╣реИ ред рдореИрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЛрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдкрд╛рдиреА рдбрд╛рд▓рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдореВрд▓реНрдп рд╕реЗ рдХрдо рд╣реЛред


рдпрд╣ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рд╛:


reptest(X0,X2):- flatten(X0,FX0), sort(0,>,FX0,Vals), repdown(X0,Vals,X0,X2),!. 

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


 repdown(X0,Vals,X,X1):- puts(Vals,X0,X1), X\=X1, balns(X0,X1),!. repdown(_,_,X,X). 

рдпрд╣ рд╡рд┐рдзреЗрдп рдПрдХ рд╕рдорд╛рдзрд╛рди рд▓реЗрдЧрд╛, рдФрд░ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ "рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ" рднрд░рд╛ рд╣реБрдЖ рд╣реИ, рдпрджрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕рдорд╛рдзрд╛рди рд╣реИред


рдпрд╣ "рдЙрддреНрдкрдиреНрди рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд" рд╡рд┐рдзрд┐ рд╣реИ, рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореВрд▓реНрдп рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕ рд╕реЗрдЯ рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рдХрд╛рд╕ рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред


рддреЛ, рдлрд┐рд░ рдореИрдВ рдкреБрдЯ (рд╡рд╛рд▓реНрд╕, рдПрдХреНрд╕ 0, рдПрдХреНрд╕ 1) рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░реВрдВрдЧрд╛, рдпрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕реНрдерд╛рди рдкрд░, рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдКрдВрдЪрд╛рдЗрдпреЛрдВ рдХреА рд╕реВрдЪреА рд╣реИ рдЬреЛ рдЗрд╕ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдКрдВрдЪрд╛рдЗрдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗред рдЗрдирдкреБрдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдкреВрд░реЗ рд╕реЗрд▓ рдХреЛ рднрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЕрдЧрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЗрддрдирд╛ рдкрд╛рдиреА рдбрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ "рд╕рд┐рд░ рдХреЗ рдКрдкрд░" рдбрд╛рд▓рд╛ рдЬрд╛рдПред


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


 puts(_,[],[]). puts(_,[X],[X]). puts(_,[X,Z],[X,Z]). puts(V,[R1,R2,R3|T],[R1|St]) :- number(R2),!,sel_biger(R2,V,R21),puts(V,[R21,R3|T],St). puts(V,[R1,R2,R3|T],[R1|St]) :- puts(V,R2,R21),puts(V,[R21,R3|T],St). 

рдпрд╣ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдмрд╛рдИрдкрд╛рд╕ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЖрдк рдкрд╣рд▓реА рддреАрди (рдФрд░ рдЖрдЧреЗ) рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ, рдЖрдк рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ, рддрддреНрд╡реЛрдВ рдХреЗ рддреНрд░рд┐рднреБрдЬ рдХрд╛ рднреА рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрда рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рдПрдХ [рдЗрддрд╛рдпрд╛] [рдпреВрдЯрд╛] рд╕реЗрд▓ рд╣реЛрдЧрд╛ред Sel_biger (R2, V, R21) рдХреА рдорджрдж рд╕реЗ рдЗрд╕ рд╕реЗрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рдЕрд░реНрде рдмрдирддрд╛ рд╣реИред


рдпрд╣ рдорд╛рди рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕рдВрднрд╡ рдКрдВрдЪрд╛рдЗрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реВрдЪреА рдХреЛ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдкрд╣рд▓реЗ рдЙрдЪреНрдЪрддрдо рдКрдВрдЪрд╛рдИ рд╣реЛ рдЬреЛ рд╕рднреА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛ, рдФрд░ рдлрд┐рд░ рдХрд┐рд╕реА рднреА рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:


 sel_biger(C,[H|_],H):-H>=C. sel_biger(C,[_|T],X):-sel_biger(C,T,X). 

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


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


 %%   balns([],[]). balns([_],[_]). balns([_,_],[_,_]). balns([B1,B2,B3|Tb],[R1,R2,R3|T]) :- blevel(B1,B2,B3,R1,R2,R3), balns([B2,B3|Tb],[R2,R3|T]). %%     ,    33 blevel([],[],[],[],[],[]). blevel([_],[_],[_],[_],[_],[_]). blevel([_,_],[_,_],[_,_],[_,_],[_,_],[_,_]). blevel([_,U1,U2|Tu],[R,C,L|T],[_,B1,B2|Tb], [_,U10,U20|Tu0],[R0,C0,L0|T0],[_,B10,B20|Tb0]):- equ(C,[U1,L,R,B1],C0,[U10,L0,R0,B10]), blevel([U1,U2|Tu],[C,L|T],[B1,B2|Tb], [U10,U20|Tu0],[C0,L0|T0],[B10,B20|Tb0]). %%    , %        equ(_,[],_,[]):-!. equ(C,_,C,_):-!. equ(C0,_,C,N):-C>C0,!,findall(X,(member(X,N),X<C),[]). equ(C0,[C0|T0],C,[C|T]):-!,equ(C0,T0,C,T). 

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


 diffall(L0,L2,S):- flatten(L0,F0),sum_list(F0,S0), flatten(L2,F2),sum_list(F2,S2), S is S2-S0. %%  ,      sums(X,S):-reptest(X,X1),diffall(X,X1,S). 

рдореИрдВ рдЙрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реВрдВрдЧрд╛ рдЬреЛ рд╕рд╛рдЗрдЯ рдиреЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рд╣реИрдВред


 reptest(X0,X2):- flatten(X0,FX0), sort(0,>,FX0,Vals), repdown(X0,Vals,X0,X2),!. repdown(X0,Vals,X,X1):- puts(Vals,X0,X1), X\=X1, balns(X0,X1),!. repdown(_,_,X,X). puts(_,[],[]). puts(_,[X],[X]). puts(_,[X,Z],[X,Z]). puts(V,[R1,R2,R3|T],[R1|St]) :- number(R2),!,sel_biger(R2,V,R21),puts(V,[R21,R3|T],St). puts(V,[R1,R2,R3|T],[R1|St]) :- puts(V,R2,R21),puts(V,[R21,R3|T],St). sel_biger(C,[H|_],H):-H>=C. sel_biger(C,[_|T],X):-sel_biger(C,T,X). %   balns([],[]). balns([_],[_]). balns([_,_],[_,_]). balns([B1,B2,B3|Tb],[R1,R2,R3|T]) :- blevel(B1,B2,B3,R1,R2,R3), balns([B2,B3|Tb],[R2,R3|T]). %     ,    33 blevel([],[],[],[],[],[]). blevel([_],[_],[_],[_],[_],[_]). blevel([_,_],[_,_],[_,_],[_,_],[_,_],[_,_]). blevel([_,U1,U2|Tu],[R,C,L|T],[_,B1,B2|Tb], [_,U10,U20|Tu0],[R0,C0,L0|T0],[_,B10,B20|Tb0]):- equ(C,[U1,L,R,B1],C0,[U10,L0,R0,B10]), blevel([U1,U2|Tu],[C,L|T],[B1,B2|Tb], [U10,U20|Tu0],[C0,L0|T0],[B10,B20|Tb0]). %    , %        equ(_,[],_,[]):-!. equ(C,_,C,_):-!. equ(C0,_,C,N):-C>C0,!,findall(X,(member(X,N),X<C),[]). equ(C0,[C0|T0],C,[C|T]):-!,equ(C0,T0,C,T). diffall(L0,L2,S):- flatten(L0,F0),sum_list(F0,S0), flatten(L2,F2),sum_list(F2,S2), S is S2-S0. sums(X,S):-reptest(X,X1),diffall(X,X1,S). %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(sums([[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]],4),true). :-assert_are_equal(sums([[1,3,3,1,3,2],[3,2,1,3,2,3],[3,3,3,2,3,1]],4),true). :-assert_are_equal(sums([[12,13,1,12],[13,4,13,12],[13,8,10,12],[12,13,12,12],[13,13,13,13]],14),true). :-assert_are_equal(sums([[2,3,4],[5,6,7],[8,9,10],[11,12,13],[14,15,16]],0),true). :-assert_are_equal(sums([],0),true). :-assert_are_equal(sums([[1]],0),true). :-assert_are_equal(sums([[2,3]],0),true). :-assert_are_equal(sums([[3],[2]],0),true). :-assert_are_equal(sums([[18,2,3],[4,5,6],[7,8,9]],0),true). :-assert_are_equal(sums([[3,5,5],[5,4,5],[5,5,5]],1),true). :-assert_are_equal(sums([[5,5,5,1],[5,1,1,5],[5,1,5,5],[5,2,5,8]],3),true). :-assert_are_equal(sums([[2,2,2],[2,1,2],[2,1,2],[2,1,2]],0),true). :-assert_are_equal(sums([[17,2,3,4,5,6,7,8,9,10]],0),true). :-assert_are_equal(sums([[9,9,9,9,9],[9,2,1,2,9],[9,2,8,2,9],[9,2,3,2,9],[9,9,9,9,9]],57),true). %:-assert_are_equal(sums([[9,9,9,9,9,9,8,9,9,9,9],[9,0,0,0,0,0,1,0,0,0,9],[9,0,0,0,0,0,0,0,0,0,9],[9,0,0,0,0,0,0,0,0,0,9],[9,9,9,9,9,9,9,9,9,9,9]],215),true). :-assert_are_equal(sums([[11,21,31],[81,9,41],[17,61,51]],12),true). :-assert_are_equal(sums([[3,3,4,4,4,2],[3,1,3,2,1,4],[7,3,1,6,4,1]],5),true). %:-assert_are_equal(sums([[78,16,94,36],[87,93,50,22],[63,28,91,60],[64,27,41,27],[73,37,12,69],[68,30,83,31],[63,24,68,36]],44),true). 

рдореБрдЭреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреА рдереАред рд╕рдм рдирд╣реАрдВ рдЧреБрдЬрд░рд╛ред


рдХрд╛рд░реНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдЧрддрд┐ рджреА рдЬрд╛рдП?


рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рд▓рдВрдмреА рдЦреЛрдЬ рдХреЗ рдХрд╛рд░рдг, рд╡реЗ рдЗрд╕ рдХреНрд░рдо рдореЗрдВ рдмрд╣реБрдд рдзреАрд░реЗ-рдзреАрд░реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдЬрдЯрд┐рд▓рддрд╛ рд╢рд╛рдпрдж n рд╣реИ!, рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдиреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


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


clp (fd) рдорд╛рдирдХ SWI-Prolog рд╡рд┐рддрд░рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИред рдпрд╣ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЪрд░ рдХреЗ рд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЪрд░ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдзреЛрдВ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

>>

рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ:
рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдорд╛рдиреЛрдВ рдХреЗ рд╕реЗрдЯ рдХрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдкреВрд░реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдЗрд╕рдХреЗ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рдЗрд╕ рд╕реАрдорд╛ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдХрд┐ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдкрд┐рд▓реНрдб рддрд░рд▓ рдХреЗ рдХреНрд░рдо рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдпрд╣ рдореИрдВ рдЗрдирдкреБрдЯ рд╕реВрдЪреА рд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдПрдХ рдирдИ рд╕реВрдЪреА рдЬрд┐рд╕рдХреЗ рддрддреНрд╡ рджрд┐рдП рдЧрдП рд░реЗрдВрдЬ рдореЗрдВ рдЕрдЬреНрдЮрд╛рдд рд╣реЛ рдЧрдП рд╣реИрдВ (рд╡рд░реНрддрдорд╛рди рддрддреНрд╡ рдХреЗ рдЖрд░ 2 рдорд╛рди рд╕реЗ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рд╡реА рддрдХ)
рдЗрдирдкреБрдЯ рдкрд░, рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА; рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рдореВрд▓реНрдпреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╡рд┐рддрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╕реВрдЪреА,
рдЬреЛ "рддрд░рд▓ рдкрджрд╛рд░реНрде рд╕рдВрддреБрд▓рди" рдХреА рд╕реАрдорд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ:


 checks(X0,X2):- flatten(X0,FX), max_list(FX,Max),checks(Max,X0,X2), balns(X0,X2), flatten(X2,FX2), labeling([down],FX2). checks(_,[],[]). checks(_,[X],[X]). checks(_,[X,Z],[X,Z]). checks(V,[R1,R2,R3|T],[R1|St]) :- number(R2),!, R21 in R2..V, checks(V,[R21,R3|T],St). checks(V,[R1,R2,R3|T],[R1|St]) :- checks(V,R2,R21),checks(V,[R21,R3|T],St). 

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


рдФрд░ рд╡рд╣рд╛рдВ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рдЬрдЯрд┐рд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
16.2.1ред рдЪрд░ рдЪрдпрди рд░рдгрдиреАрддрд┐
рдЪрд░ рдЪрдпрди рд░рдгрдиреАрддрд┐ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рджреЗрддреА рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдЪрд░ рд╡рд░ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ:
рдмрд╛рдИрдВ рдУрд░ - рд╡реЗ рдореЗрдВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХреНрд░рдо рдореЗрдВ рдЪрд░ рд▓реЗрдмрд▓ рдХрд░реЗрдВред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред
рдПрдлрдПрдл рдкрд╣рд▓реЗ рдЕрд╕рдлрд▓ред рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдбреЛрдореЗрди рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдмрд╛рдИрдВ рдУрд░ рд╡рд╛рд▓реЗ рдЪрд░ рдХреЛ рд▓реЗрдмрд▓ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдЗрдиреНрдлреИрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХрд╛ рдЬрд▓реНрджреА рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдпрд╣ рдЕрдХреНрд╕рд░ рдПрдХ рдЕрдЪреНрдЫреА рд░рдгрдиреАрддрд┐ рд╣реЛрддреА рд╣реИ рдЬрдм рдкрд╣рд▓реЗ рдЪрд░ рдХреЛ рдЪреБрдиреЗ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХреЗ рдЪрд░ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдбреЛрдореЗрди рд╣реЛрддреЗ рд╣реИрдВред
рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдбреЛрдореЗрди рд╡рд╛рд▓реЗ рдЪрд░реЛрдВ рдХреЗ ffc, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЕрд╡рд░реЛрдзреЛрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рдмрд╕реЗ рдмрд╛рдИрдВ рдУрд░ рдЕрдЧрд▓рд╛ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдмрд╛рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдкреНрд░рдХрд╛рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд░рдгрдиреАрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдиреНрдпреВрдирддрдо рдмрд╛рдИрдВ рдЪрд░ рдХрд╛ рд▓реЗрдмрд▓ рдЬрд┐рд╕рдХреА рдирд┐рдЪрд▓реА рд╕реАрдорд╛ рдЕрдЧрд▓реА рд╕рдмрд╕реЗ рдХрдо рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдорд┐рдирдЯ / 1 рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдЬреЛ рд╕рдорд╛рдзрд╛рди рд╕рдорд╛рдзрд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдКрдкрд░ рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреА рд░рдгрдиреАрддрд┐ рд╣реИ рдпрджрд┐ рдЖрдк рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рдореВрд▓реНрдп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡рд┐рднрд┐рдиреНрди рдЪрд░ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдиреНрдпреВрдирддрдо рд▓рд╛рдЧрдд рд╕рдорд╛рдзрд╛рди)ред
рдЕрдзрд┐рдХрддрдо рдмрд╛рдИрдВ рдУрд░ рд╡рд╛рд▓рд╛ рдЪрд░ рд▓реЗрдмрд▓ рдХрд░реЗрдВ рдЬрд┐рд╕рдХрд╛ рдКрдкрд░реА рдмрд╛рдЙрдВрдб рд╕рдмрд╕реЗ рдЖрдЧреЗ рд╣реИред рдпрд╣ рднреА рдЕрдзрд┐рдХрддрдо / 1 рд╕реЗ рднрд┐рдиреНрди рд╣реИред рдФрд░ рд╡реИрд╢реНрд╡рд┐рдХ рдорд╛рди рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдиреНрдпреВрдирддрдо рдХреЗ рд▓рд┐рдП рд╕рд▓рд╛рд╣ рдЕрдзрд┐рдХрддрдо рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред
16.2.2ред рдореВрд▓реНрдп рдХреНрд░рдо
рдореВрд▓реНрдп рдХреНрд░рдо рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ:
variable рдЪреБрдиреЗ рд╣реБрдП рдЪрд░ рдХреЗ рдбреЛрдореЗрди рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рдЖрд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдЖрдЬрд╝рдорд╛рдПрдБред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред
рдиреАрдЪреЗ рдЕрд╡рд░реЛрд╣реА рдХреНрд░рдо рдореЗрдВ рдбреЛрдореЗрди рддрддреНрд╡реЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдВред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрд╕рдордорд┐рдд рд╡рд┐рддрд░рдг рдорд┐рд▓рд╛ рд╣реИ, рдЬреИрд╕реЗ рд╣рдордиреЗ рдКрдкрд░ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓реЗрдмрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдкрд╣рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░рдо рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдПрдВред
16.2.3ред рд╢рд╛рдЦрд╛рдкрд░ рд░рдгрдиреАрддрд┐
рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдмрдВрдЯреА рд░рдгрдиреАрддрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ:
рдЪрд░рдг рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕ = рд╡реА рдФрд░ рдПрдХреНрд╕ # \ = рд╡реА рдХреЗ рдмреАрдЪ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╡реА рдореВрд▓реНрдп рдЖрджреЗрд╢ рд╡рд┐рдХрд▓реНрдкреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред
enum рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ X рдХреЗ рд▓рд┐рдП, X = V_1, X = V_2 рдЖрджрд┐ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, X рдХреЗ рдбреЛрдореЗрди рдХреЗ V_i рдХреЗ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдПред рдСрд░реНрдбрд░ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рдг рд╡рд┐рдХрд▓реНрдкреЛрдВ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
bisect рдкреНрд░рддреНрдпреЗрдХ рдЪрд░ X рдХреЗ рд▓рд┐рдП, X # = <M рдФрд░ X #> M рдХреЗ рдмреАрдЪ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ M, X рдХреЗ рдбреЛрдореЗрди рдХрд╛ рдордзреНрдп рдмрд┐рдВрджреБ рд╣реИред рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЪреБрдиреЗрдВ рдпрджрд┐ рдХрдИ рдЪрд░ рдкреВрд░реНрдгрд╛рдВрдХ рдХреА рд╢реНрд░реЗрдгреА рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдорд╛рди, рдЧрдгрдирд╛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рдмреАрдЪ рдПрдХ рдХреЗ рдмрдЬрд╛рдп (рдЬреИрд╕реЗ рдкреНрд░рддрд┐рд╢рдд, рдмрдирд╛рдо рдП = 0, рдмреА = 1, рд╕реА = 2)


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


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


 %   balns([],[]). balns([_],[_]). balns([_,_],[_,_]). balns([B1,B2,B3|Tb],[R1,R2,R3|T]) :- blevel(B1,B2,B3,R1,R2,R3), balns([B2,B3|Tb],[R2,R3|T]). %     ,    33 blevel([],[],[],[],[],[]). blevel([_],[_],[_],[_],[_],[_]). blevel([_,_],[_,_],[_,_],[_,_],[_,_],[_,_]). blevel([_,U1,U2|Tu],[R,C,L|T],[_,B1,B2|Tb], [_,U10,U20|Tu0],[R0,C0,L0|T0],[_,B10,B20|Tb0]):- equ(C,[U1,L,R,B1],C0,[U10,L0,R0,B10]), blevel([U1,U2|Tu],[C,L|T],[B1,B2|Tb], [U10,U20|Tu0],[C0,L0|T0],[B10,B20|Tb0]). %    , %        equ(C0,_,C,[U,L,R,D]):-C#>C0,C#=<U,C#=<R,C#=<L,C#=<D. equ(_,[],_,[]). equ(C0,[C0|T0],C,[C|T]):-equ(C0,T0,C,T). equ(C,_,C1,_):-C1#=C. 

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


рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рд╕рдорд╛рдзрд╛рди рджреВрдВрдЧрд╛:


 :- use_module(library(clpfd)). checks(X0,X2):- flatten(X0,FX), max_list(FX,Max),checks(Max,X0,X2), balns(X0,X2), flatten(X2,FX2), labeling([down],FX2). checks(_,[],[]). checks(_,[X],[X]). checks(_,[X,Z],[X,Z]). checks(V,[R1,R2,R3|T],[R1|St]) :- number(R2),!, R21 in R2..V, checks(V,[R21,R3|T],St). checks(V,[R1,R2,R3|T],[R1|St]) :- checks(V,R2,R21),checks(V,[R21,R3|T],St). %   balns([],[]). balns([_],[_]). balns([_,_],[_,_]). balns([B1,B2,B3|Tb],[R1,R2,R3|T]) :- blevel(B1,B2,B3,R1,R2,R3), balns([B2,B3|Tb],[R2,R3|T]). %     ,    33 blevel([],[],[],[],[],[]). blevel([_],[_],[_],[_],[_],[_]). blevel([_,_],[_,_],[_,_],[_,_],[_,_],[_,_]). blevel([_,U1,U2|Tu],[R,C,L|T],[_,B1,B2|Tb], [_,U10,U20|Tu0],[R0,C0,L0|T0],[_,B10,B20|Tb0]):- equ(C,[U1,L,R,B1],C0,[U10,L0,R0,B10]), blevel([U1,U2|Tu],[C,L|T],[B1,B2|Tb], [U10,U20|Tu0],[C0,L0|T0],[B10,B20|Tb0]). %    , %        equ(C0,_,C,[U,L,R,D]):-C#>C0,C#=<U,C#=<R,C#=<L,C#=<D. equ(_,[],_,[]). equ(C0,[C0|T0],C,[C|T]):-equ(C0,T0,C,T). equ(C,_,C1,_):-C1#=C. diffall(L0,L2,S):- flatten(L0,F0),sum_list(F0,S0), flatten(L2,F2),sum_list(F2,S2), S is S2-S0. sums(X,S):-checks(X,X1),!,diffall(X,X1,S). %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(sums([[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]],4),true). :-assert_are_equal(sums([[1,3,3,1,3,2],[3,2,1,3,2,3],[3,3,3,2,3,1]],4),true). :-assert_are_equal(sums([[12,13,1,12],[13,4,13,12],[13,8,10,12],[12,13,12,12],[13,13,13,13]],14),true). :-assert_are_equal(sums([[2,3,4],[5,6,7],[8,9,10],[11,12,13],[14,15,16]],0),true). :-assert_are_equal(sums([[18,2,3],[4,5,6],[7,8,9]],0),true). :-assert_are_equal(sums([[3,5,5],[5,4,5],[5,5,5]],1),true). :-assert_are_equal(sums([[5,5,5,1],[5,1,1,5],[5,1,5,5],[5,2,5,8]],3),true). :-assert_are_equal(sums([[2,2,2],[2,1,2],[2,1,2],[2,1,2]],0),true). :-assert_are_equal(sums([[17,2,3,4,5,6,7,8,9,10]],0),true). :-assert_are_equal(sums([[9,9,9,9,9],[9,2,1,2,9],[9,2,8,2,9],[9,2,3,2,9],[9,9,9,9,9]],57),true). :-assert_are_equal(sums([[78,16,94,36],[87,93,50,22],[63,28,91,60],[64,27,41,27],[73,37,12,69],[68,30,83,31],[63,24,68,36]],44),true). :-assert_are_equal(sums([[11,21,31],[81,9,41],[17,61,51]],12),true). :-assert_are_equal(sums([[5,5,5],[5,1,5],[5,5,5]],4),true). :-assert_are_equal(sums([[5,5,5],[5,1,5],[5,1000,6]],4),true). :-assert_are_equal(sums([[5,8,7,7],[5,2,1,5],[7,1,7,1],[8,9,6,9],[9,8,9,9]],12),true). :-assert_are_equal(sums([[11,21,31],[81,9,41],[17,61,51]],12),true). :-assert_are_equal(sums([[3,3,4,4,4,2],[3,1,3,2,1,4],[7,3,1,6,4,1]],5),true). :-assert_are_equal(sums([[14,17,18,16,14,16],[17,3,10,2,3,8],[11,10,4,7,1,7],[13,7,2,9,8,10],[13,1,3,4,8,6],[20,3,3,9,10,8]],25),true). :-assert_are_equal(sums([[14,17,12,13,20,14],[12,10,5,8,9,5],[16,1,4,7,2,1],[17,4,3,1,7,2],[16,6,5,8,7,6],[17,10,4,8,5,6]],12),true). 

рдФрд░ рдЕрдзрд┐рдХ рдкрд░реАрдХреНрд╖рдг
 :-assert_are_equal(sums([[13,16,15,18,15,15],[14,1,8,9,7,9],[19,5,4,2,5,10],[13,1,7,9,10,3],[17,7,5,10,6,1],[15,9,8,2,8,3]],36),true). :-assert_are_equal(sums([[18,13,13,17,12,11],[17,2,6,10,5,10],[11,10,2,8,8,2],[12,6,10,8,8,7],[18,4,7,6,7,4],[20,5,9,2,3,10]],18),true). :-assert_are_equal(sums([[14,20,11,19,19,16],[11,10,7,4,9,6],[17,2,2,6,10,9],[15,9,2,1,4,1],[15,5,5,5,8,7],[14,2,8,6,10,7]],11),true). :-assert_are_equal(sums([[19383,10886,12777,16915,17793,18335,15386,10492,16649,11421],[12362,27,8690,59,7763,3926,540,3426,9172,5736],[15211,5368,2567,6429,5782,1530,2862,5123,4067,3135],[13929,9802,4022,3058,3069,8167,1393,8456,5011,8042],[16229,7373,4421,4919,3784,8537,5198,4324,8315,4370],[16413,3526,6091,8980,9956,1873,6862,9170,6996,7281],[12305,925,7084,6327,336,6505,846,1729,1313,5857],[16124,3895,9582,545,8814,3367,5434,364,4043,3750],[11087,6808,7276,7178,5788,3584,5403,2651,2754,2399],[19932,5060,9676,3368,7739,12,6226,8586,8094,7539]],79058),true). :-assert_are_equal(sums([[10795,10570,11434,10378,17467,16601,10097,12902,13317,10492],[16652,756,7301,280,4286,9441,3865,9689,8444,6619],[18440,4729,8031,8117,8097,5771,4481,675,709,8927],[14567,7856,9497,2353,4586,6965,5306,4683,6219,8624],[11528,2871,5732,8829,9503,19,8270,3368,9708,6715],[16340,8149,7796,723,2618,2245,2846,3451,2921,3555],[12379,7488,7764,8228,9841,2350,5193,1500,7034,7764],[10124,4914,6987,5856,3743,6491,2227,8365,9859,1936],[11432,2551,6437,9228,3275,5407,1474,6121,8858,4395],[16029,1237,8235,3793,5818,4428,6143,1011,5928,9529]],68900),true). :-assert_are_equal(sums([[18776,12404,14443,15763,14613,14538,18606,16840,12904,14818],[15128,688,7369,7917,9917,6996,3324,7743,9470,2183],[18490,5499,9772,6725,5644,5590,7505,8139,2954,9786],[17669,8082,8542,8464,197,9507,9355,8804,6348,8611],[13622,7828,9299,7343,5746,5568,4340,5422,3311,3810],[17605,1801,5661,3730,4878,1305,9320,8736,9444,8626],[18522,3465,6708,3416,8282,3258,2924,7637,2062,5624],[12600,2036,3452,1899,9379,5550,7468,71,973,7131],[13881,4930,8933,5894,8660,163,7199,7981,8899,2996],[12959,3773,2813,9668,7190,1095,2926,6466,5084,1340]],61413),true). :-assert_are_equal(sums([[12090,17684,13376,15542,15936,19107,17445,19756,19179,18418],[16887,9412,3348,2172,1659,2009,2336,5210,6342,7587],[18206,9301,7713,7372,5321,1255,4819,4599,7721,9904],[15939,9811,3940,5667,1705,6228,1127,9150,5984,6658],[13920,9224,2422,7269,1396,4081,5630,84,9292,1972],[17672,3850,7625,5385,1222,9299,6640,6042,3898,713],[12298,6190,524,2590,8209,8581,8819,9336,7732,1155],[15994,8004,379,4769,5273,1776,8850,7255,1860,8142],[15579,5884,1993,3205,7621,9567,2504,613,1961,2754],[11326,4259,8944,8202,3202,3506,6784,2021,2842,868]],89383),true). :-assert_are_equal(sums([[19528,15189,18872,19908,19958,10498,18036,18808,17753,16248],[13303,3333,2133,1648,2890,9754,7567,1746,368,9529],[14500,8046,3788,9797,6249,6990,3303,3033,5363,2497],[10253,4892,7686,9125,1152,3996,5975,9188,9157,3729],[15436,2460,3414,3921,460,6304,28,8027,8050,6748],[17556,8902,4794,7697,8699,1043,1039,2002,428,6403],[14500,681,7647,8538,6159,5151,2535,2134,4339,1692],[12215,6127,504,5629,49,964,8285,6429,5343,6335],[13177,2900,5238,7971,6949,289,5367,7988,2292,5795],[10743,3144,2829,8390,1682,5340,3541,569,3826,4232]],100439),true). 

рд╕рд╛рдЗрдЯ рд╕реЗ рдпреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП, рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ 30 рдЯреБрдХрдбрд╝реЗред рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИ, рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рднреА, рд╣рд░ рд╕рдордп рдПрдХ рд╕реЗрдХрдВрдб рддрдХред


рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ...


рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ


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


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

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


All Articles