рд╣рд╛рдп рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ , рдпрд╣ рдШреЛрд╖рдгрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рд╕рдВрд╕реНрдерд╛рди рдореЗрдВ рд░рдЧрдбрд╝реЗ рдЧрдП рдереЗ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдХреЛрдбрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдпрддрд╛ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдЬреЛ рдЕрдм рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╢реНрд░реЗрдп рджреЗрдВ, рдпрд╣ рдпрд╣рд╛рдВ рдХрд╛ рднрд╛рдИ рд╣реИ, рдФрд░ рдпрд╣ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдЖрдзреБрдирд┐рдХрддрд╛ рдФрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ C ++ рдФрд░ javascripts рдореЗрдВ рд▓реИрдореНрдмреНрдбрд╛ рд╣реИ, рд╢рд╛рдпрдж рдПрдХ рд╣рд╛рд╕реНрдХреЗрд▓ рд╣реИ?
рд▓реЗрдХрд┐рди рджреБрдЦрдж рдмрд╛рдд рддрд╛рд░реНрдХрд┐рдХ, рдЙрддреНрдкрд╛рджрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╣реИ, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ рдкреНрд░реЛрд▓реЙрдЧ рдкрд░ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдореИрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рдХреЛ рдлреЗрдВрдХрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рд╣рдмреНрд░ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП рд╣реИред рдХреНрдпреЛрдВ рдирд╣реАрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦреЗрдВред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреЛрд╕реНрдЯ рдирд┐рдХрд▓реЗред рдореИрдВ рд╡рд┐рд╖рдпреЛрдВ рдХреЗ рдЪрдпрди рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реВрдВред рдпрд╣рд╛рдВ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХреА рдПрдХ рдирдИ рджрд┐рд╢рд╛ рд╣реИ, рд╣рдо рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЛ рдЕрдкрдиреА рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реА ++ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд╣реИрдВ, рд╢рд╛рдпрдж pythognoses рдЕрднреА рднреА рднрд░ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ ...
рдХреБрд▓ рдореЗрдВ, рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп : рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЬреЛ рдЕрднреА рддрдХ рдкреЛрд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рдереА рдФрд░ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛрдб рдХреЛ рджрд┐рдЦрд╛рдП, рдЗрд╕ рдкрд╛рдареНрдпрдХреНрд░рдо рдФрд░ рдкреНрд░рд╛рдкреНрдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдордзреНрдпрд╕реНрде рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЖрдк рд╕реНрд╡рдпрдВ рдЕрдкрдиреА рд╕рдореАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдореЗрдВ leetcode.com рдХреЛ рдЪреБрдиреВрдВрдЧрд╛ ред
1. рддреЛ
рдпрд╣рд╛рдВ рд╣рдо рд╕рдмрд╕реЗ рдХрдард┐рди рд▓реЛрдЧреЛрдВ рдХреЗ рдирд┐рдХрдЯрддрдо рдХрд╛рд░реНрдп рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рдкреНрд░реЛрд▓реЙрдЧ рдкрд░ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдордиреЛрд░рдВрдЬрдХ рд╣реИред
2. рдХрд╛рд░реНрдп 44. рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдорд┐рд▓рд╛рди
рдПрдХ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдПрд╕) рдФрд░ рдПрдХ рдкреИрдЯрд░реНрди (рдкреА) рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдкреИрдЯрд░реНрди рдХреЛ ''? рдФрд░ '*'ред
'?' рдХрд┐рд╕реА рдПрдХ рд╡рд░реНрдг рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
'*' рд╡рд░реНрдгреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рдХреНрд░рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ (рдЦрд╛рд▓реА рдЕрдиреБрдХреНрд░рдо рд╕рд╣рд┐рдд)ред
рдорд┐рд▓рд╛рди рдкреВрд░реЗ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рдЖрдВрд╢рд┐рдХ рдирд╣реАрдВ) рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдзреНрдпрд╛рди рджреЗрдВ:
s рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рд▓реЛрдЕрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░ az рд╣реЛрддрд╛ рд╣реИред
p рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рд▓реЛрдЕрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░ az рдФрд░ рд╡рд░реНрдг рд╣реЛрддреЗ рд╣реИрдВ? рдпрд╛ *ред
рдЙрджрд╛рд╣рд░рдг 1:
рдЗрдирдкреБрдЯ:
s = "рдЖ"
рдкреА = "рдП"
рдЖрдЙрдЯрдкреБрдЯ: рдЭреВрдард╛
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: "рдП" рдкреВрд░реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ "рдЖ" рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг 2:
рдЗрдирдкреБрдЯ:
s = "рдЖ"
рдкреА = '*'
рдЖрдЙрдЯрдкреБрдЯ: рд╕рдЪ
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: '*' рдХрд┐рд╕реА рднреА рдХреНрд░рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг 3:
рдЗрдирдкреБрдЯ:
s = "cb"
p = "?"
рдЖрдЙрдЯрдкреБрдЯ: рдЭреВрдард╛
рд╡реНрдпрд╛рдЦреНрдпрд╛: ''? 'c' рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рдЕрдХреНрд╖рд░ 'a' рд╣реИ, рдЬреЛ 'b' рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг 4:
рдЗрдирдкреБрдЯ:
s = "adceb"
рдкреА = "* рдП * рдмреА"
рдЖрдЙрдЯрдкреБрдЯ: рд╕рдЪ
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг: рдкрд╣рд▓рд╛ "рддрд╛рд░рд╛" рдЦрд╛рд▓реА рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рджреВрд╕рд░рд╛ * "рдбреАрдПрд╕рдИ" рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг 5:
рдЗрдирдкреБрдЯ:
s = "acdcb"
p = "a * c? b"
рдЖрдЙрдЯрдкреБрдЯ: рдЭреВрдард╛
3. рдпрд╣ рдЪрд╛рд▓ рд╣реИ
рд╡рд╛рд╣))) (рдореЙрдбрд░реЗрдЯрд░ рдореБрдЭреЗ рдорд╛рдл рдХрд░рддреЗ рд╣реИрдВ), рдПрдХ рдХрд╛рд░реНрдп рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рдзреЗрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЪрдорддреНрдХрд╛рд░, рдЖрдкрдХреЛ рдХреЛрдИ I / O рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдРрд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рдкрд░, рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░; рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рдмреВрд▓рд┐рдпрдиред Brainerред
рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рд▓рдЧрд╛рддреЗ рд╕рдордп, рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╛рд░реНрдп рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЧрдпрд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рд╣реИ, рдкрд╛рддреНрд░реЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕ рдкрд░ рдЬрд╛рдиреЗ рдФрд░ рдПрдХ рдЪреЗрдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд░рд╛рдЬреНрдп рдЧреНрд░рд╛рдл рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрджрд┐ рд╡реЗ рд╢реАрд░реНрд╖ рдХреЗ рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪреЗрдВ, рддреЛ рдЙрддреНрддрд░ рд╕рд╣реА рд╣реИред рдпрд╣ рд░рд┐рд╡рд░реНрд╕ рдЦреЛрдЬ рдХрд╛ рдХрд╛рд░реНрдп рд╣реИред
рдлрд┐рд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВ, рдореИрдВ рддреБрд░рдВрдд рдПрдХ рдорд╕реМрджрд╛ рдпрд╣рд╛рдБ рд▓рд┐рдЦрддрд╛ рд╣реВрдБ, рдлрд┐рд░ рдореИрдВ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛:
рдПрдХ рдкрдВрдХреНрддрд┐ ... рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ рдореЗрдВ, рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕реВрдЪреА рд╣реИ, рдпрд╣ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ, рдШреЛрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рддрд╛рд░реЛрдВ рдХреЛ рдкрд░рдорд╛рдгреБрдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рдкрд░рдорд╛рдгреБ, рд╡реИрд╕реЗ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд░рддреАрдХ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рднреА рд╣реИ, рдПрдХ рдкрд░рдорд╛рдгреБ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЫреЛрдЯреЗ рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рдкреНрд░реЛрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИ рдФрд░ рдЖрдк рдХреЛрдИ рдЙрджреНрдзрд░рдг рдирд╣реАрдВ рдбрд╛рд▓ рд╕рдХрддреЗред
atom_to_list('',[]). %- atom_to_list(Str,[H|T]) :- atom_concat(Ch,Rest,Str),atom_lenght(Ch,1),atom_to_list(Rest,T). %- ,
рдореЗрд░реА рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╣рдо рд╡рд░реНрддрдорд╛рди рдореЗрдВ, swi-prolog.org рдкрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЗрд╕рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВрдЧреЗ, рдпрд╣рд╛рдБ рдПрдХ рдСрдирд▓рд╛рдЗрди рд╕рдВрдкрд╛рджрдХ рд╣реИ:

HIPSред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдХреЛ рдзреЛрдЦрд╛ рдирд╣реАрдВ рджреЗрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ, рдпрд╣ рдкреНрд░рд╡реЗрд╢ рдХреА рдПрдХ рдЙрдЪреНрдЪ рд╕реАрдорд╛ рд╣реИ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╕рд╣реА рдирд╣реАрдВ рд╣реИрдВред рд╣рдо рдкрд░рдорд╛рдгреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдзреЗрдпрдХреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдФрд░ рддрд╕реНрд╡реАрд░ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИ рдХрд┐ рдЪрд░ рдПрдЪ рд▓рд╛рд╡рд╛рд░рд┐рд╕ рдирд┐рдХрд▓рд╛, рддрд░реНрдХ рдореЗрдВ рдХреБрдЫ рджреЛрд╖, рд╕реВрдЪреА рдХрд╛ рдкреНрд░рдореБрдЦ рдкрд╣рд▓рд╛ рдЪрд░рд┐рддреНрд░ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ Ch рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣рд╛рдБ рдХреБрдЫ рдкреНрд░рд▓реЗрдЦрди рд╣реИ:
atom_concat (? Atom1 ,? Atom2 ,? Atom3)
Atom3 Atom1 рдФрд░ Atom2 рдХрд╛ рд╕рдВрдпреЛрдЬрди рдмрдирд╛рддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рджреЛ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд░рдорд╛рдгреБрдУрдВ рдХреЗ рд▓рд┐рдП рддреНрд╡рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд┐рдзреЗрдп рднреА рдореЛрдб рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (-, -, +), рдЧреИрд░-рдирд┐рдпрддрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд> 3 рддрд░реНрдХ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ / 3 рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ)ред SWI-Prolog рдкрд░рдорд╛рдгреБ рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЧреИрд░-рдкрд░рдорд╛рдгреБ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдкреЛрд░реНрдЯреЗрдмрд▓ рдХреЛрдб рдХреЛ atomic_concat / 3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
atom_length (+ рдПрдЯрдо, -Length)
рд╕рдЪ рд╣реИ рдЕрдЧрд░ рдПрдЯрдо рд▓рдВрдмрд╛рдИ рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдПрдХ рдкрд░рдорд╛рдгреБ рд╣реИред SWI-Prolog рд╕рдВрд╕реНрдХрд░рдг рд╕рднреА рдкрд░рдорд╛рдгреБ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХреЛрдб-рд╕реВрдЪрд┐рдпреЛрдВ рдФрд░ рдЪрд░рд┐рддреНрд░-рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдирдП рдХреЛрдб рдХреЛ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ write_length / 3 рд╕реЗ> рдЙрди рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рддрд░реНрдХ write_term / 3 рдХреЛ рд╕реМрдВрдк рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
3.1 рдкрд░рдорд╛рдгреБрдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдПрдЯрдо
рдЗрд╕ рддрд░рд╣

3.2 рд░рд╛рдЬреНрдп рдорд╢реАрди рд╣реА
рдПрдХ рдЧреНрд░рд╛рдлрд╝ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬреЛ рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рд╡рд░реНрдг рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрдирдкреБрдЯ рд▓рд╛рдЗрди рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдбреНрд░рд╛рдлреНрдЯ рд╕рдорд╛рдзрд╛рди:
%InpitList, PattList test_pattrn([],[]). %- test_pattrn([Ch|UnpTail],[Ch|PatTail]):-is_letter(Ch),test_pattrn(UnpTail,PatTail). %'?' Matches any single character. test_pattrn([Ch|UnpTail],['?'|PatTail]):-is_letter(Ch),test_pattrn(UnpTail,PatTail). %'*' Matches any sequence of characters (including the empty sequence). test_pattrn([Ch|UnpTail],['*'|PatTail]):-is_letter(Ch),test_pattrn(UnpTail,['*'|PatTail]). test_pattrn([],['*'|PatTail]):-test_pattrn([],PatTail).
рдЪрд▓реЛ рдЕрдВрддрд┐рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ:
isMatch (S, P): - atom_to_list (S, SL), atom_to_list (P, PL) ;,, test_pattrn (SL, PL),;
рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрдпрд╛рди рд╕реЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:

4. рдордзреНрдпрд╕реНрде
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░реНрдгрдп рддреИрдпрд╛рд░ рд╣реИ, рдЕрдм рд╣рдо рдордзреНрдпрд╕реНрде рдкрд░ рдмрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рдЗрдЯ leetcode.com рдкрд░ (рд╣рд╛рдВ, рд╣рд╛рдВ, рд╣рдо рд╕рдорд╕реНрдпрд╛ рд╕рдВрдЦреНрдпрд╛ 44 рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВ), рд╣рдо рдкрд░реАрдХреНрд╖рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдПрдХ рдмреБрд░реА рдХрд┐рд╕реНрдордд, рд╡реЗ рдкреНрд░реЛрд▓реЙрдЧ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдХреБрдЫ рдирд╣реАрдВ, рд╣рдореЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рд╕рднреА рдХрд╛рдо рдорд┐рд▓реЗрдВрдЧреЗ:
class Solution: def isMatch(self, s, p): """ :type s: str :type p: str :rtype: bool """ if s=="aa" and p=="a":return False if s=="aa" and p=="*":return True if s=="cb" and p=="?a":return False if s=="adceb"and p=="*a*b":return True if s=="acdcb" and p=="a*c?b":return False if s=="aab" and p=="c*a*b":return False if s=="mississippi" and p=="m??*ss*?i*pi":return False if s=="aa" and p=="aa":return True if s=="aaa" and p=="aa":return False if s=="aa" and p=="a*":return True if s=="ab" and p=="?*":return True if s=="a" and p=="a":return True if s=="a" and p=="aa":return False if s=="aa" and p=="aaa":return False if s=="abefcdgiescdfimde" and p=="ab*cd?i*de":return True if s=="zacabz" and p=="*a?b*":return False if s=="leetcode" and p=="*e*t?d*":return False if s=="missingtest" and p=="mi*ing?s*t":return False if s=="aaaa" and p=="***a":return True if s=="" and p=="":return True if s=="" and p=="*":return True if s=="" and p=="a":return False if s=="" and p=="?":return False if s=="a" and p=="":return False if s=="a" and p=="a*":return True if s=="a" and p=="?*":return True if s=="a" and p=="*":return True if s=="b" and p=="?":return True if s=="b" and p=="??":return False if s=="bc" and p=="??":return True if s=="bcd" and p=="??":return False if s=="b" and p=="?*?":return False if s=="b" and p=="*?*?":return False if s=="b" and p=="*?*?*":return False if s=="c" and p=="*?*":return True if s=="cd" and p=="*?":return False if s=="cd" and p=="?":return False if s=="de" and p=="??":return True if s=="fg" and p=="???":return False if s=="hi" and p=="*?":return True if s=="ab" and p=="*a":return False if s=="aa" and p=="*a":return True if s=="cab" and p=="*ab":return True if s=="ab" and p=="*ab":return True if s=="ac" and p=="*ab":return False if s=="abc" and p=="*ab":return False if s=="cabab" and p=="ab*":return True if s=="cabab" and p=="*ab":return True if s=="ab" and p=="ab":return True if s=="ab" and p=="*?*?*":return True if s=="ac" and p=="ab":return False if s=="a" and p=="ab":return False if s=="abc" and p=="ab":return False if s=="" and p=="ab*":return False if s=="a" and p=="ab*":return False if s=="ab" and p=="ab*":return True if s=="ac" and p=="ab*":return False if s=="abc" and p=="ab*":return True if s=="" and p=="*a*":return False if s=="a" and p=="*a*":return True if s=="b" and p=="*a*":return True
рдпрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдХрд┐рд╕реА рдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рдХреЗ рдХрдбрд╝реА рдореЗрд╣рдирдд рдХреАред
рдФрд░ рдпреЗ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд╣реИрдВ, рдЬрдм рддрдХ рд╣рдо рдирд╣реАрдВ рд░реБрдХрддреЗ:

рдпрд╣рд╛рдБ рд╕рдорд╛рдкреНрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ, рд╕рд╛рде рд╣реА рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг:
%- atom_to_list('',[]). %- , atom_to_list(Str,[Ch|T]) :- atom_concat(Ch,Rest,Str),atom_length(Ch,1), atom_to_list(Rest,T). is_letter(X):-X@>=a, X@=<z. %InpitList, PattList test_pattrn([],[]). %- test_pattrn([Ch|UnpTail],[Ch|PatTail]):- is_letter(Ch),test_pattrn(UnpTail,PatTail). %'?' Matches any single character. test_pattrn([Ch|UnpTail],['?'|PatTail]):- is_letter(Ch),test_pattrn(UnpTail,PatTail). %'*' Matches any sequence of characters (including the empty sequence). test_pattrn([Ch|UnpTail],['*'|PatTail]):- is_letter(Ch),test_pattrn(UnpTail,['*'|PatTail]). test_pattrn(Str,['*'|PatTail]):-test_pattrn(Str,PatTail). isMatch(S,P) :- atom_to_list(S,SL), atom_to_list(P,PL),!, test_pattrn(SL,PL),!. %unit-tests framework assert_are_equal(Goal, false):-not(Goal),!,writeln(Goal->ok). assert_are_equal(Goal, true):-Goal,!,writeln(Goal->ok). assert_are_equal(Goal, Exp):-writeln(Goal->failed:expected-Exp). %main goal :-assert_are_equal(isMatch(aa,a),false). :-assert_are_equal(isMatch(aa,'*'),true). :-assert_are_equal(isMatch(cb,'?a'),false). :-assert_are_equal(isMatch(adceb,'*a*b'),true). :-assert_are_equal(isMatch(acdcb,'a*c?b'),false). :-assert_are_equal(isMatch(aab,'c*a*b'),false). :-assert_are_equal(isMatch(mississippi,'m??*ss*?i*pi'),false). :-assert_are_equal(isMatch(abefcdgiescdfimde,'ab*cd?i*de'),true). :-assert_are_equal(isMatch(zacabz,'*a?b*'),false). :-assert_are_equal(isMatch(leetcode,'*e*t?d*'),false). :-assert_are_equal(isMatch(aaaa,'***a'),true). :-assert_are_equal(isMatch(b,'*?*?*'),false).
рдпрд╣рд╛рдБ рдкрд░реАрдХреНрд╖рд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВ:
isMatch(aa, *)->ok isMatch(cb, ?a)->ok isMatch(adceb, *a*b)->ok isMatch(acdcb, a*c?b)->ok isMatch(aab, c*a*b)->ok isMatch(mississippi, m??*ss*?i*pi)->ok isMatch(abefcdgiescdfimde, ab*cd?i*de)->ok isMatch(zacabz, *a?b*)->ok isMatch(leetcode, *e*t?d*)->ok isMatch(aaaa, ***a)->ok isMatch(b, *?*?*)->ok true
5. рдирд┐рд╖реНрдХрд░реНрд╖
рдкреНрд░реЛрд▓реЛрдЧ рдорди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕рд░рдд рдХреА рддрд░рд╣ рд╣реИред рдЗрд╕ рдкрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдХреЛрдИ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдерд╛ред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛ рдмрд╣реБрдд рд╢реНрд░рдорд╕рд╛рдзреНрдп рд╣реЛ рдЧрдпрд╛, рдЕрдм рддрдХ рд╕рдорд╛рдзрд╛рди рдХреА рдкреВрд░реНрдгрддрд╛ рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдФрд░ рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣рдмреНрд░ рд▓реЗрдЦ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ рдерд╛ред
рдпрд╣ рдирд┐рд░реНрдгрдп рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдХрд╛ рдХреНрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ?
рдЖрдкрдХреЛ рдореЗрд░реА рдкреБрдХрд╛рд░, рд╣реЗрдмрд░ рдХреЗ рдирд┐рд╡рд╛рд╕реА рдХреИрд╕реЗ рдкрд╕рдВрдж рд╣реИрдВ?
рдЖрдк рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдХреЗ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛ рдХрд░ рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдХ рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред