рдордиреЛрд░рдВрдЬрдХ рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ # 3

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


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


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


рдХреЙрд▓


рд╕рдорд╕реНрдпрд╛ рдХреЛ рдФрд░ рднреА рддреЗрдЬреА рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдЬрдЧрд░ рдерд╛ рдФрд░ рд╕рдордп рдерд╛, рдФрд░ рдХреНрдпрд╛ рдЕрдЬрдЧрд░ рдкрд░ рдПрдХ рддреЗрдЬрд╝ рд╕рдорд╛рдзрд╛рди рд╣реИ?



рдореБрдЭреЗ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ "рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди 3 рдСрдирд▓рд╛рдЗрди рд╕рдмрдорд┐рд╢рди рдХреЗ 1.55% рд╕реЗ рдЕрдзрд┐рдХ рддреЗрдЬреА рд╕реЗ рд░рдирдЯрд╛рдЗрдо: 2504 рдПрдордПрд╕ред"


рдореИрдВ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ, рдЖрдЧреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдСрдирд▓рд╛рдЗрди рд╣реИред


1 рдирд┐рдпрдорд┐рдд?


рд╢рд╛рдпрдж рдпрд╣рд╛рдБ рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рддреЗрдЬ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред


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


рдпрд╣ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рддреНрд╡рд░рд┐рдд рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдЗрд╕ рдПрдХ рдХреЗ рд╕рдорд╛рди рдЦреЛрдЬ, рдкреНрд░рдпрд╛рд╕ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


1. рдЗрд╕ рдирд┐рдпрдорд┐рддрддрд╛ рдХрд╛ рдПрдХ рдЙрджреНрджреЗрд╢реНрдп рдмрдирд╛рдУ,
2. рдЪрдпрдирд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдирд┐рдпрдорд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдирд┐рдпрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╣реА рдХрд┐рдП рдЧрдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд░ рдЙрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ,
3. рддреБрд▓рдирд╛ рдХрд░реЗрдВ рдФрд░ рдЬрд╡рд╛рдм рддреИрдпрд╛рд░ рд╣реИ
рджреЗрдЦрд╛:


import re def isMatch(s,p): return re.match(s,pat_format(p))!=None def pat_format(pat): res="" for ch in pat: if ch=='*':res+="(.)*" if ch=='?':res+="." else: res+=ch return res 

рдпрд╣рд╛рдБ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕рд╣реА рд╣реИред


рдореИрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╣рд╛рдВ рдирд╣реАрдВ рдерд╛, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ, рдЖрдкрдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред



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


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


рдФрд░ рдРрд╕реЗ рдЕрджреНрднреБрдд рдкрд╛рда рдкрд░, рдореБрдЭреЗ рдЕрднреА рднреА рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ


 import re def isMatch(s,p): return re.match(pat_format(p),s)==None def pat_format(pat): res="" for ch in pat: if ch=='*':res+="(.)*" else: if ch=='?':res+="." else:res+=ch return res 


рдХрдард┐рди


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдордврд╝рд╛ рд╣реБрдЖ рдерд╛ рддрд╛рдХрд┐ рдЬреЛ рд▓реЛрдЧ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝реЗ, рдореБрдЭреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рд╕реЗ рдкрд╣рд▓реЗ рдерд╛, рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХреЛрдИ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рдереАрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред


рдЗрд╕рд▓рд┐рдП, рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ рдФрд░ рдкрд╣рд▓рд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдорд╛рд░реА рд░реЗрдЦрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


рдЬреАрддрдирд╛?
рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдпрд╛рд╕ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛, рдпрд╣ рдирд┐рдпрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдЖрд╕рд╛рди рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рд╣реИред рдЪреМрдбрд╝рд╛рдИ-рдкрд╣рд▓реЗ рдЦреЛрдЬ рд╕рдорд╛рдзрд╛рди рдиреЗ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред


рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ,


 import re def isMatch(s,p): res=re.match(pat_format(p),s) if res is None: return False else: return res.group(0)==s def pat_format(pat): res="" for ch in pat: if ch=='*':res+="(.)*" else: if ch=='?':res+="." else:res+=ch return res 

рдЗрд╕ рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ:



рдЕрдкреАрд▓


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


 import re def isMatch(s,p): res=re.match(pat_format(p),s) if res is None: return False else: return res[0]==s def pat_format(pat): res="" for ch in pat: if ch=='*':res+="(.)*" else: if ch=='?':res+="." else:res+=ch return res ##test 940 import time pt=time.time() print(isMatch("aaaabaaaabbbbaabbbaabbaababbabbaaaababaaabbbbbbaabbbabababbaaabaabaaaaaabbaabbbbaababbababaabbbaababbbba","*****b*aba***babaa*bbaba***a*aaba*b*aa**a*b**ba***a*a*")) print(time.time()-pt) "***** b * рдП.рдмреА.рдП. *** babaa * bbaba *** рдПрдХ * Aaba * b * рдЖ ** рдПрдХ * рдЦ ** рдмрд╛ *** рдПрдХ * рдПрдХ *") import re def isMatch(s,p): res=re.match(pat_format(p),s) if res is None: return False else: return res[0]==s def pat_format(pat): res="" for ch in pat: if ch=='*':res+="(.)*" else: if ch=='?':res+="." else:res+=ch return res ##test 940 import time pt=time.time() print(isMatch("aaaabaaaabbbbaabbbaabbaababbabbaaaababaaabbbbbbaabbbabababbaaabaabaaaaaabbaabbbbaababbababaabbbaababbbba","*****b*aba***babaa*bbaba***a*aaba*b*aa**a*b**ba***a*a*")) print(time.time()-pt) 

рдЖрдк рдЗрд╕реЗ рдШрд░ рдкрд░ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЪрдорддреНрдХрд╛рд░, рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдмрд╕ рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рдирд╣реАрдВ рд▓рдЧрддрд╛, рдпрд╣ рдЬрдорд╛ рджреЗрддрд╛ рд╣реИ, рдКрд╣ред


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


рд╡реЗрдВ


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


рдореИрдВ рдЙрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдВрдЧрд╛:


 func isMatch(s string, p string) bool { res:=strings.Replace(p, "*", "(.)*", -1) res2:=strings.Replace(res, "?", ".", -1) r, _ := regexp.Compile(res2) fr:=r.FindAllString(s,1) return !(len(fr)==0 || len(fr)!=0 && fr[0]!=s) } 

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдБ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдкрд╛рда рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛, рд╡рд╣рд╛рдБ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рддреБрдЪреНрдЫ рдирд╣реАрдВ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реА рдХреЗ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ ...


рдпрд╣ рдПрдХ рдЕрджреНрднреБрдд рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдЧрддрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрд▓ ~ 60 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╛рдзрд╛рди рдПрдХ рд╣реА рд╕рд╛рдЗрдЯ рдкрд░ рдХреЗрд╡рд▓ 15% рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рд╕реЗ рддреЗрдЬ рд╣реИред



рдФрд░ рдкреНрд░реЛрд▓реЛрдЧ рдХрд╣рд╛рдВ рд╣реИ


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рднреВрд▓ рднрд╛рд╖рд╛ рд╣рдореЗрдВ рдкрд░реНрд▓ рд╕рдВрдЧрдд рд╕рдВрдЧрдд рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред


рдЗрд╕реЗ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзреЗрдп рдХреЗ рд╕рд╛рде рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкреВрд░реНрд╡-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВред


 pat([],[]). pat(['*'|T],['.*'|Tpat]):-pat(T,Tpat),!. pat(['?'|T],['.'|Tpat]):-pat(T,Tpat),!. pat([Ch|T],[Ch|Tpat]):-pat(T,Tpat). isMatch(S,P):- atom_chars(P,Pstr),pat(Pstr,PatStr),!, atomics_to_string(PatStr,Pat), term_string(S,Str), re_matchsub(Pat, Str, re_match{0:Str},[bol(true),anchored(true)]). 

рдФрд░ рд░рдирдЯрд╛рдЗрдо рдареАрдХ рд╣реИ:


 isMatch(aa,a)->ok:0.08794403076171875/sec isMatch(aa,*)->ok:0.0/sec isMatch(cb,?a)->ok:0.0/sec isMatch(adceb,*a*b)->ok:0.0/sec isMatch(acdcb,a*c?b)->ok:0.0/sec isMatch(aab,c*a*b)->ok:0.0/sec isMatch(mississippi,m??*ss*?i*pi)->ok:0.0/sec isMatch(abefcdgiescdfimde,ab*cd?i*de)->ok:0.0/sec isMatch(zacabz,*a?b*)->ok:0.0/sec isMatch(leetcode,*e*t?d*)->ok:0.0009980201721191406/sec isMatch(aaaa,***a)->ok:0.0/sec isMatch(b,*?*?*)->ok:0.0/sec isMatch(aaabababaaabaababbbaaaabbbbbbabbbbabbbabbaabbababab,*ab***ba**b*b*aaab*b)->ok:0.26383304595947266/sec isMatch(abbbbbbbaabbabaabaa,*****a*ab)->ok:0.0009961128234863281/sec isMatch(babaaababaabababbbbbbaabaabbabababbaababbaaabbbaaab,***bba**a*bbba**aab**b)->ok:0.20287489891052246/sec 

рд▓реЗрдХрд┐рди, рдХреБрдЫ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ, рдЕрдЧрд▓рд╛ рдкрд░реАрдХреНрд╖рдг рд▓рд╛рдпрд╛ рдЧрдпрд╛:


 Not enough resources: match_limit Goal (directive) failed: user:assert_are_equal(isMatch(aaaabaaaabbbbaabbbaabbaababbabbaaaababaaabbbbbbaabbbabababbaaabaabaaaaaabbaabbbbaababbababaabbbaababbbba,'*****b*aba***babaa*bbaba***a*aaba*b*aa**a*b**ba***a*a*'),false) 

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


рдХреЗрд╡рд▓ рдкреНрд░рд╢реНрди рд░рд╣ рдЧрдПред рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрддрд┐ рд▓рдВрдЧрдбрд╝рд╛ рд╣реИред
рдкрд╛рд░рджрд░реНрд╢реА рд╕рдорд╛рдзрд╛рди рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИрдВ?


рдХрд┐рд╕реА рдиреЗ рдШреЛрд╖рдгрд╛рддреНрдордХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рддрдВрддреНрд░ рд╣реИрдВ?


рдФрд░ рдЖрдк рдЗрди рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпрд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдХрд╣рд╛рдВ рд╣реИ?

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


All Articles