рдпрд╣ рдЕрдзреНрдпрдпрди рдореВрд▓ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рджреМрд░рд╛рди (рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ, рдХрд╛рдлреА рд╕рддрд╣реА) рдЗрдВрдЯрд░рдиреЗрдЯ рд╢реЛрдз рд╕реЗ рдХреЛрдИ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЦрд┐рд▓реМрдиреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬрд┐рди рдкрд╛рддреНрд░реЛрдВ рдореЗрдВ рдПрдХ рд╡рд┐рдорд╛рди рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд╡реЗ рдирд┐рдпрдорд┐рдд рд╣реЗрдХреНрд╕рд╛рдЧреЛрдиреНрд╕ рдХреЗ рд╕рд╛рде рдкреНрд░рд╢рд╕реНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдореИрдВ рдЗрд╕ рдкреНрд░рд╢реНрди рд╕реЗ рдЕрдЪрдВрднрд┐рдд рдерд╛ - рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рдорд╛рди рдкрд░ рд░реЗрдЦрд╛ рдХреИрд╕реА рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдПред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣реЗрдХреНрд╕рд╛рдЧреЛрди рдП рд╕реЗ рд╣реЗрдХреНрд╕рд╛рдЧреЛрди рдмреА рдХреЗ рдЪрд░рд┐рддреНрд░ рдХреЗ рдЗрд╖реНрдЯрддрдо рдЖрдВрджреЛрд▓рди рдХрд╛ рдХрд╛рд░реНрдп (рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд┐рдорд╛рди рдореЗрдВ рдХреЛрдИ рдмрд╛рдзрд╛ рдирд╣реАрдВ рд╣реИ, рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрд╖реНрдЯрддрдо рдЖрдВрджреЛрд▓рди рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рд╣реЗрдХреНрд╕рд╛рдЧреЛрдиреНрд╕ рдХреА рдХрдо рд╕реЗ рдХрдо рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИ) рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЗ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдорд╛рд░реНрдЧ рдЕрджреНрд╡рд┐рддреАрдп рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЪреМрд░рд╛рд╣реЛрдВ рд╕реЗ рдврдХреЗ рдПрдХ рд╡рд┐рдорд╛рди рдкрд░ред рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдорд╛рд░реНрдЧ рд▓рд╛рдЗрди рдЦрдВрдб рдХреЗ рдХрд░реАрдм рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐
рдмреНрд░реЗрд╕реЗрдирд╣реИрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд┐рд░реНрдорд┐рдд рдЫрд╡рд┐ рд░реЗрдЦрд╛ рдЦрдВрдб рдХреЗ рдХрд░реАрдм рд╣реИ, рдФрд░ рд╕рд╛рде рд╣реА, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдлреА рдкрд╛рд░рджрд░реНрд╢реА рдФрд░ рд╕рд░рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдмрд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдЧрд╛: рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХреЗ рдХреЗрдВрджреНрд░реЛрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рд▓рд╛рдЗрди рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╣реЗрдХреНрд╕рд╛рдЧреЛрдирд▓ "рдкрд┐рдХреНрд╕реЗрд▓" рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдЕрдВрддрд┐рдо рдирд┐рд░реНрдорд┐рдд рдкрд┐рдХреНрд╕реЗрд▓ рд╕реЗ, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЬрд┐рд╕рдореЗрдВ 6 рдЕрдиреНрдп рд╣реЗрдХреНрд╕рд╛рдЧреЛрдиреНрд╕ рд╣реИрдВ) рд╣реЗрдХреНрд╕рд╛рдЧреЛрди, рдирд┐рд░реНрдорд╛рдг рдХреЗ рддрд╣рдд рдЦрдВрдб рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рддрдХ рдХреЗрдВрджреНрд░ рд╕реЗ рджреВрд░реА (рд╕рд╛рдзрд╛рд░рдг рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рдЕрд░реНрде рдореЗрдВ) рдХрд╛ рдпреЛрдЧ рдиреНрдпреВрдирддрдо рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рджреЛ рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ - рдпрд╛ рджреЛ рдХрдо , рдпрд╛ рдХреБрдЫ рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реБрдП, рдиреАрдЪреЗ рдФрд░ рджрд╛рдПрдВ рдФрд░ рдиреАрдЪреЗ рджрд╛рдПрдВ, рдЬреЛ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛)ред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд╕реНрд╡рдпрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ, рд╡рд░реНрдЧрдореВрд▓реЛрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЧрдгрдирд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред
рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рд░реЗрдЦрд╛рдкреБрдВрдЬ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ "рдкрд┐рдХреНрд╕реЗрд▓" рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддрд╛ рд╣реИред рдХрдИ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкрд░ рдмрд╕ рдЧрдпрд╛ред
рд╣реЗрдХреНрд╕рд╛рдЧреЛрдиреНрд╕ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ - x рдФрд░ y рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рдЬреЛ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдореИрдВ "рд░реЗрдЦрд╛рдкреБрдВрдЬ" рдХреЛ рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реВрдВрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ "рдЬреНрдпрд╛рдорд┐рддреАрдп" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЗрд╕реЗ рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореБрдЭреЗ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдорд┐рд▓реА рдереАред рдиреАрдЪреЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдПрдХ рд╢рд░реНрдд рджреВрдВрдЧрд╛ред рдпрджрд┐ рд╣рдо (0, 0) рдФрд░ рдЕрдВрдд рдХреЗ рд░реВрдк рдореЗрдВ (x, y) рдЦрдВрдб рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓рд╛ рдорд╛рдорд▓рд╛ рддрдм рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╕реНрдерд┐рддрд┐ x тЙе [y / 2] рдФрд░ рддрджрдиреБрд╕рд╛рд░ x <[y / 2], рдЬрд╣рд╛рдВ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рд╣реЛрддреЗ рд╣реИрдВред рдкреВрд░реЗ рднрд╛рдЧ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдВред рдпреЗ рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдореЛрдЬрд╝реЗрдХ рдХреЛ рджреЛ рдЕрд╕рдорд╛рди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕реАрдорд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИ:

рдкрд╣рд▓рд╛ рдорд╛рдорд▓рд╛: x case [y / 2]
рдкрд╣рд▓реЗ, рдореИрдВ рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рджреВрдВрдЧрд╛, рдпрд╣ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрд╣ рд╣рдбрд╝рддрд╛рд▓реА рд╣реИ рдХрд┐ рдмреНрд░реЗрд╢реЗрдирд╣реЗрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо "рдорд╛рдереЗ рдореЗрдВ" рдХрд╛ рдЖрд╡реЗрджрди рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рджреЗрдЧрд╛ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ x рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░ рдмрдврд╝рддрд╛ рд╣реИ, рдФрд░ y рдЬрдм рддреНрд░реБрдЯрд┐ рдорд╛рди рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдПрдХ рд╕рдордХреЛрдг рд╕реЗ рд╡рд┐рд╖рдо рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ x рдФрд░ y рдХреА рд╕рдордХрд╛рд▓рд┐рдХ рд╡реГрджреНрдзрд┐ рдПрдХ рдЕрдВрддрд░ рдХреЛ рдЬрдиреНрдо рджреЗрдЧреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рд╖рдЯреНрднреБрдЬ (2, 2) рдореЗрдВ рджреЛрдиреЛрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╖рдЯреНрднреБрдЬ (3, 3) рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЛрдВ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдкрд╣рд▓реА рдЖрдо рд╕реАрдорд╛рдПрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ (2, 2) рд╕реЗ рд╣рдо рдмрд┐рдВрджреБ (2, 3) рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ (3, 3) рдкрд░, рдХреЛрдИ рдЕрдВрддрд░рд╛рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореЛрдЬрд╝реЗрдХ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡рд┐рдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдФрд░ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

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


рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ (рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЗрдХреНрд╕рд╛рдЧреЛрдиреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛) x + [(y + 1) / 2] + 1 рд╣реИред рдЪреМрдХреЛрд░ рдХреЛрд╖реНрдардХ рдкреВрд░реЗ рднрд╛рдЧ рдХреЛ рд▓реЗ рд░рд╣реЗ рд╣реИрдВред рдЬреНрдпрд╛рдорд┐рддреАрдп рд░реВрдк рд╕реЗ, рдпрд╣ рдХреНрд╖реИрддрд┐рдЬ рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╣реИ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╡рд┐рд╖рдо рд░реЗрдЦрд╛рдУрдВ рд╕реЗ рдмрджрд▓рдХрд░ (рд╢реАрд░реНрд╖ рд░реЗрдЦрд╛ рд╕рдВрдЦреНрдпрд╛ 0 рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдо рд╣реИ)ред
рджреВрд╕рд░рд╛ рдорд╛рдорд▓рд╛: x <[y / 2]
рджреВрд╕рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ y + 1 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╢рд╛рд╕реНрддреНрд░реАрдп рдмреНрд░реЗрд╕реЗрдирд╣реИрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдорд╛рдорд▓рд╛ рдкрд╣рд▓реЗ рдХреЗ рд╕рдордорд┐рдд рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рди рд╣реИ - рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╡рд┐рд░реВрдкрдг рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдПрдХ рдЕрдиреНрдп рдУрдХрдЯреЗрдЯ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬрд╣рд╛рдВ рдореБрдЦреНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддреЗ рд╣реИрдВред рд╡рд╛рдИ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рд╣реЛрддреЗ рд╣реИрдВред


рдЬрд╛рд╡рд╛ рдХреЛрдбpublic final class Line implements Iterable<Point> { private final Point begin; private final int dx; private final int dy; private final int sx; private final int sy; public Line(final Point begin, final Point end) { this.begin = begin; int dx = end.x - begin.x; int dy = end.y - begin.y; if (dx < 0) { dx = -dx; sx = -1; } else { sx = 1; } if (dy < 0) { dy = -dy; sy = -1; } else { sy = 1; } this.dx = dx + (dy + 1) / 2; this.dy = dy; } @Override public Iterator<Point> iterator() { return dx > dy ? new LineIterator1() : new LineIterator2(); } private final class LineIterator1 implements Iterator<Point> { private int x = 0; private int y = 0; private int error = 0; @Override public boolean hasNext() { return x <= dx; } @Override public Point next() { if (x > dx) return null; Point point = new Point(begin.x + (x - (y + 1) / 2) * sx, begin.y + y * sy); x++; if (x <= dx) { error += dy; if (2 * error >= dx) { y++; error -= dx; } } return point; } @Override public void remove() { throw new UnsupportedOperationException(); } } private final class LineIterator2 implements Iterator<Point> { private int x = 0; private int y = 0; private int error = 0; @Override public boolean hasNext() { return y <= dy; } @Override public Point next() { if (y > dy) return null; Point point = new Point(begin.x + (x - (y + 1) / 2) * sx, begin.y + y * sy); y++; if (y <= dy) { error = error + dx; if (2 * error >= dy) { error -= dy; x++; } } return point; } @Override public void remove() { throw new UnsupportedOperationException(); } } }
рдХрдХреНрд╖рд╛ рдмрд┐рдВрджреБ public final class Point { public final int x; public final int y; public Point(final int x, final int y) { this.x = x; this.y = y; } }
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдореИрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛ рдПрдХ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рд╣реИ, рдФрд░ рдореИрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд┐рдП рдЧрдП рд╕рдордп рдХреЗ рд▓рд┐рдП рдорд╛рдлреА рдЪрд╛рд╣рддрд╛ рд╣реВрдВред