рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдУрд╕реАрдЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдирдо рдХреЗ рд╕рд╛рде рддреЗрдЬреА рд╕реЗ рдмрд╛рдЗрдирд░реА рдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рд▓рдХреНрд╖реНрдп рдПрдХ рдореИрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдерд╛ рдЬреЛ рдЫрд╡рд┐рдпреЛрдВ рдФрд░ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рдХреЛрдб рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде рднреА, рдкрд╛рда рдХреЛ рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рджреА рдЧрдИ рдереАред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рд╣рдореЗрд╢рд╛ рдЕрдВрдЧреНрд░реЗрдЬреА рд╣реЛрддреА рд╣реИ рдФрд░ рд╕рднреА рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреА рдЪреМрдбрд╝рд╛рдИ рд╕рдорд╛рди рд╣реЛрддреА рд╣реИ (рдореЛрдиреЛрдкреЙрдЬрд╝реНрдб рдлрд╝реЙрдиреНрдЯ) - рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрди рдлреЛрдВрдЯ рдореЗрдВ 1 рдФрд░ I, 0 рдФрд░ O, рдЖрджрд┐ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рджреЗрдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдХрд╛рд░реНрдп рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдЖрддрд╛ рд╣реИ:

1. рдЕрдкрдиреА рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкрддреНрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдЦреЛрдЬрдирд╛


рдФрд░ Apple рдХреЗ рдирдП рдврд╛рдВрдЪреЗ рдХреЗ рд╡рд┐рдЬрд╝рди рдиреЗ рдЗрд╕рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ред

рдпрд╣рд╛рдБ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


2. рджреА рдЧрдИ рд╕реАрдорд╛рдУрдВ рдореЗрдВ рдкрддреНрд░ рдХреА рдорд╛рдиреНрдпрддрд╛


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

рдЙрджрд╛рд╣рд░рдг рдЙрджрд╛рд╣рд░рдг:



рдФрд░ рдпрд╣рд╛рдВ рдкреЗрдбрд╝ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛
рдпрд╣ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред


рдЗрд╕ рдпреЛрдЬрдирд╛рдмрджреНрдз рдЖрд░реЗрдЦрдг рдХреЛ рдХреЛрдб рдореЗрдВ рдХреИрд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рддрд╛рдХрд┐ рдЗрд╕рдореЗрдВ рдмрд┐рд▓ рди рд╣реЛ, рдФрд░ рддрд╛рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рд╕реНрдкрд╖реНрдЯ рд╣реЛ!

рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рдмрд╛рдЗрдирд░реА рдЯреНрд░реА рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдврд╛рдВрдЪрд╛ рд╣реИред

enum Tree<Node, Result> { ///Empty result case empty ///Result with generic type case r(Result) ///Recursive case with generic tree indirect case n(Node, Tree<Node, Result>, Tree<Node, Result>) } 

рдЕрдм, рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдЕрдкрдиреА рдкреВрд░реА рдбреНрд░рд╛рдЗрдВрдЧ рдХреЛ рдХреЛрдб рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

 //.c ,       ,   "H"    "O" //  .c   ,     let HorOTree = TreeOCR.n(.c, .r("H"), .r("O")) 

рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рдХрдбрд╝реА рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдмрдбрд╝рд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред



рдЖрдк рдмрд╣реБрдд рдпреЛрдЬрдирд╛рдмрджреНрдз рддрд░реАрдХреЗ рд╕реЗ рд╕рдм рдХреБрдЫ рд╡рд┐рдШрдЯрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдкрддреНрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ рдЖрдЦрд┐рд░реА рдХреНрд╖рдг, рдпрд╣ рд╣реИ рдХрд┐ рдореЙрдбрд▓ рдЦреБрдж рдХреЛ рдХреИрд╕реЗ рджреЗрдЦрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдХрд╛рдо рд╣реЛрддреЗ рд╣реИрдВред

 extension Tree where Node == OCROperations, Result == String { func find(_ colorChecker: LetterExistenceChecker, with frame: CGRect) -> String? { switch self { case .empty: return nil case .r(let element): return element case let .n(operation, left, right): let exist = operation.action(colorChecker, frame) return (exist ? left : right).find(colorChecker, with: frame) } } } 

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

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


рдореБрдЭреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ, рдЖрд▓реЛрдЪрдирд╛рдУрдВ рдХреЛ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реЛрдЧреАред

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


All Articles