рд╡рд░реНрдХрдЖрдЙрдЯ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡

рдпрд╛рддреНрд░реА, рдирдорд╕реНрддреЗред


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


рдЪрд▓рд┐рдП, рд╡реНрдпрд╛рдкрд╛рд░ рдкрд░ рдЙрддрд░рддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдЖрдк рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдЬрдЧрд░ рдореЗрдВ рд░реБрдЪрд┐ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдХ рд╕рд╛рде рдХрдИ рд╣рдЬрд╛рд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рдПрдХ рдирдИ рдмреИрдЯрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдорд╛рдЪрд╛рд░ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдЯреЗрд╕реНрд▓рд╛ рдХреЗ рд▓рд┐рдП, рд╣реИ stotysch рд╡рд┐рдЪрд╛рд░реЛрдВ, рдФрд░ рдкреЛрд░реНрдЯрд▓ razrabotnichestskom рддреЛ рдХреБрдЫ рдирд╣реАрдВ, рддреЛ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдкреАрдЫреЗ рджреЗрдЦрд╛ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╢рд╛рдпрдж рдЙрдирдореЗрдВ рд╕реЗ рдкрд╛рдВрдЪ, рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ Esch рдХреА рджреВрд╕рд░реА рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдпрд╣ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП confuses ...


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


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


рдмреНрдпрд╛рдЬ рдЙрдард╛рдирд╛ рдмрдВрдж рдХрд░реЗрдВ, рд╢реБрд░реВ рдХрд░реЗрдВ ...


рдЯрд╛рд╕реНрдХ 446 рдЕрдВрдХрдЧрдгрд┐рддреАрдп-рд╕реНрд▓рд╛рдЗрд╕-ii-laterence


рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдЕрдВрдХрдЧрдгрд┐рдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рддреАрди рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдпрджрд┐ рдХрд┐рд╕реА рднреА рджреЛ рд▓рдЧрд╛рддрд╛рд░ рддрддреНрд╡реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рд╕рдорд╛рди рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреЗ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдХреНрд░рдо рд╣реИрдВ:
1, 3, 5, 7, 9
7, 7, 7, 7
3, -1, -5, -9
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдХреНрд░рдо рдЕрдВрдХрдЧрдгрд┐рдд рдирд╣реАрдВ рд╣реИред
1, 1, 2, 5, 7

рд╕рднреА рдореЗрдВ, рджреЛрдиреЛрдВ рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд╕ рдЗрд╕реЗ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдкрд░ рдкрдврд╝реЗрдВ:


рдПрдХ рд╢реВрдиреНрдп-рдЕрдиреБрдХреНрд░рдорд┐рдд рд╕рд░рдгреА A рдореЗрдВ N рд╕рдВрдЦреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЙрд╕ рд╕рд░рдгреА рдХрд╛ рдПрдХ рдмрд╛рдж рдХрд╛ рдЯреБрдХрдбрд╝рд╛ рдкреВрд░реНрдгрд╛рдВрдХ (P0, P1, ..., Pk) рдХрд╛ рдХреЛрдИ рдЕрдиреБрдХреНрд░рдо рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ 0 1 P0 <P1 <... <Pk <Nред
рд╕рд░рдгреА A рдХреЗ рдПрдХ рдкрд░рд╡рд░реНрддреА рд╕реНрд▓рд╛рдЗрд╕ (P0, P1, ..., Pk) рдХреЛ рдЕрдВрдХрдЧрдгрд┐рдд рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЕрдиреБрдХреНрд░рдо A [P0], A [P1], ..., A [Pk-1], A [Pk] рдЕрдВрдХрдЧрдгрд┐рдд рд╣реИред ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ k, 2ред
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдП рдореЗрдВ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдкрд░рд╡рд░реНрддреА рд╕реНрд▓рд╛рдЗрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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


рдпрд╣ рдРрд╕рд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдЗрдирдкреБрдЯ рд╕реВрдЪреА рдХреЗ рд╕рднреА рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдПрдХ рдмрдбрд╝реЗ рд╕рдореВрд╣ рдореЗрдВ рд╕рдмреНрд▓рд┐рд╕реНрдЯ рд╣реИрдВред


рдЙрджрд╛рд╣рд░рдг:
рдЗрдирдкреБрдЯ: [реи, рек, рем, 4, резреж]
рдЖрдЙрдЯрдкреБрдЯ: 7
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг:
рд╕рднреА рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдкрд░рд╡рд░реНрддреА рд╕реНрд▓рд╛рдЗрд╕ рд╣реИрдВ:
[2,4,6]
[4,6,8]
[6,8,10]
[2,4,6,8]
[4,6,8,10]
[2,4,6,8,10]
[2,6,10]

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдореЗрдВ рдПрдХ рд╕рдмрд▓рд┐рд╕реНрдЯ рдХреИрд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░реЗрдВ:


sublists(InputList, SubList):- append(Prefix,Root,InputList), append(SubList,Suffix,Root). 

рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдХрд░реЗрдВ рдХрд┐ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рд╕реВрдЪреА рддреНрд░рд┐рдХреЛрдгреАрдп рдореЗрдВ рдЬрд╛рдВрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:


 is_seq(A,B,C]):-AB =:=BC. is_seq(A,B,C|Tail]):-AB =:=BC, is_seq(B,C|Tail]). 

рдпрджрд┐ рд╣рдо рд╕реВрдЪреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рдХреНрд░рдордкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╛рд╕ рдореЗрдВ рдЦрдбрд╝реЗ рддрддреНрд╡реЛрдВ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдмрд▓рд┐рд╕реНрдЯ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдРрд╕рд╛ рд╕рдмрд▓рд┐рд╕реНрдЯ рд╣реИ рдЬреЛ рдЖрдЗрдЯрдо рдХреЛ рдЫреЛрдбрд╝ рдХрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдлрд┐рд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд▓рдЧрд╛рдПрдВ:


 seq(_,[]). seq([H|T],[H|T1]):-seq(T,T1). seq([_|T],T1):-seq(T,T1). 

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


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


рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЗрдирдкреБрдЯ рдкрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдорд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдРрд╕реА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП [0,1,2,2,2] 4 рд╕рдорд╛рдзрд╛рди рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ 2-рдХрд╛ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЯреБрдХрдбрд╝рд╛ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рддреАрди рд╡рд┐рдХрд▓реНрдк [0,1,2] рдФрд░ рдПрдХ [2,2,2] рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред


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


рдореИрдВ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдВрдЦреНрдпрд╛ рдмрдирд╛рдКрдВрдЧрд╛, рд╕реВрдЪреА рдХреЛ рдШрдЯрдХреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдмрджрд▓ рджреЗрдВ рдореВрд▓реНрдп / рд╕реВрдЪрдХрд╛рдВрдХ, рдПрдХ рд╕рдВрд░рдЪрд┐рдд рд╢рдмреНрдж, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕реЗ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ [0 / 1,1 / 2,2 / 3,2 / 4,2 / 5] рд╣реЛрдЧрд╛ред рдЗрд╕ рдЗрдирдкреБрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреНрд░рдо рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдВрдЧреЗред


рдЗрд╕рд▓рд┐рдП, рдЖрдк рд╕реВрдЪреА рдХреЛ рдПрдХ рдЪрд┐рд╣реНрдирд┐рдд рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:


 label([],[],_). label([A|T],[A/N|T1],N):-N1 is N+1, label(T,T1,N1). 

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


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


 %is_seq ,  ,  is_seq([A/An,B/Bn,C/Cn],2,N):- AB=:=BC, N is 10000*(A+An)+100*(B+Bn)+(C+Cn). is_seq([A/An,B/Bn,C/Cn|T],K,N):- AB=:=BC, is_seq([B/Bn,C/Cn|T],K1,N1), K is K1+1, N is N1+(A+An)*(100**K). 

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


 get_number(List,N) :- label(List,ListL,1), setof(Len,K^Sub^(seq(ListL,Sub),is_seq(Sub,K,Len)),Result), length(Result,N),!. get_number(_,0). 

рдмреЗрд╢рдХ, рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдпрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдРрд╕рд╛ рдкреВрд░рд╛ рдкрд╛рда рд╣реИ, рдЬреЛ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрдЯ рд╕реЗ рдХрдЯреНрдЯрд░ рдордЫрд▓реА рд╣реИ (рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ):


 label([],[],_). label([A|T],[A/N|T1],N):-N1 is N+1, label(T,T1,N1). seq(_,[]). seq([H|T],[H|T1]):-seq(T,T1). seq([_|T],T1):-seq(T,T1). is_seq([A/An,B/Bn,C/Cn],2,N):- AB=:=BC, N is 10000*(A+An)+100*(B+Bn)+(C+Cn). is_seq([A/An,B/Bn,C/Cn|T],K,N):- AB=:=BC, is_seq([B/Bn,C/Cn|T],K1,N1), K is K1+1, N is N1+(A+An)*(100**K). get_number(List,N) :- label(List,ListL,1),setof(Len,K^Sub^(seq(ListL,Sub),is_seq(Sub,K,Len)),Result), length(Result,N),!. get_number(_,0). %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). %all test :-assert_are_equal(get_number([2,4,6,8,10],7),true). :-assert_are_equal(get_number([],0),true). :-assert_are_equal(get_number([1],0),true). :-assert_are_equal(get_number([1,2],0),true). :-assert_are_equal(get_number([1,2,3],1),true). :-assert_are_equal(get_number([1,2,3,4],3),true). :-assert_are_equal(get_number([1,2,3,4,5],7),true). :-assert_are_equal(get_number([1,2,3,4,5,6],12),true). :-assert_are_equal(get_number([1,2,3,4,5,6,7],20),true). :-assert_are_equal(get_number([1,2,3,4,5,6,7,8],29),true). :-assert_are_equal(get_number([1,2,3,4,5,6,7,8,9],41),true). :-assert_are_equal(get_number([1,2,3,4,5,6,7,8,9,10],55),true). :-assert_are_equal(get_number([2,2,3,4],2),true). :-assert_are_equal(get_number([0,1,2,2,2],4),true). :-assert_are_equal(get_number([0,2000000000,-294967296],0),true). :-assert_are_equal(get_number([1,1,1],1),true). :-assert_are_equal(get_number([1,1,1,1],5),true). :-assert_are_equal(get_number([1,1,1,1,1],16),true). :-assert_are_equal(get_number([1,1,1,1,1,1],42),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1],99),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1],219),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1],466),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1,1],968),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1,1,1],1981),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1,1,1,1],4017),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1,1,1,1,1],8100),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1,1,1,1,1,1],16278),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],32647),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],65399),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],130918),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],261972),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],524097),true). :-assert_are_equal(get_number([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],1048365),true). 

рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреА рджрдХреНрд╖рддрд╛ рд╣реИ:


 get_number([2, 4, 6, 8, 10], 7)->ok:0/sec get_number([], 0)->ok:0/sec get_number([1], 0)->ok:0/sec get_number([1, 2], 0)->ok:0/sec get_number([1, 2, 3], 1)->ok:0/sec get_number([1, 2, 3, 4], 3)->ok:0/sec get_number([1, 2, 3, 4, 5], 7)->ok:0/sec get_number([1, 2, 3, 4, 5, 6], 12)->ok:0/sec get_number([1, 2, 3, 4, 5, 6, 7], 20)->ok:0/sec get_number([1, 2, 3, 4, 5, 6, 7, 8], 29)->ok:0/sec get_number([1, 2, 3, 4, 5, 6, 7, 8, 9], 41)->ok:0/sec get_number([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 55)->ok:0/sec get_number([2, 2, 3, 4], 2)->ok:0/sec get_number([0, 1, 2, 2, 2], 4)->ok:0/sec get_number([0, 2000000000, -294967296], 0)->ok:0/sec get_number([1, 1, 1], 1)->ok:0/sec get_number([1, 1, 1, 1], 5)->ok:0/sec get_number([1, 1, 1, 1, 1], 16)->ok:0/sec get_number([1, 1, 1, 1, 1, 1], 42)->ok:0/sec get_number([1, 1, 1, 1, 1, 1, 1], 99)->ok:0/sec get_number([1, 1, 1, 1, 1, 1, 1, 1], 219)->ok:0/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1], 466)->ok:0/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 968)->ok:0/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 1981)->ok:0/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 4017)->ok:0/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 8100)->ok:0/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 16278)->ok:0/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 32647)->ok:1/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 65399)->ok:1/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 130918)->ok:3/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 261972)->ok:6/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 524097)->ok:12/sec get_number([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], 1048365)->ok:27/sec 

рдПрдХ рд╕реВрдЪреА рдПрдХрддреНрд░ рдХрд░рдирд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рд┐рд░реНрдл рдирд┐рд░реНрдгрдп рдХреБрдВрдЬреА, рдмрд╣реБрдд рд╣реА рдмреЛрдЭрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рдирд┐рд░реНрдгрдп рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рд╕рднреА рдЕрджреНрд╡рд┐рддреАрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдЧрд┐рдирдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред


рдЖрдЙрдЯрдкреБрдЯред


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


рдлрд┐рд░ рд╕реЗ рдореИрдВ рд╕рд╡рд╛рд▓ рдЫреЛрдбрд╝рддрд╛ рд╣реВрдБ ...


рд╕рднреА рд╕рдорд╛рди, рдЙрддреНрддрд░реЛрдВ рдХреА рдЦреЛрдЬ рд╣рдорд╛рд░реЗ рдкреЗрд╢реЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд╣реИ рдирд╛?

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


All Articles