рдР рдФрд░ 2048ред рднрд╛рдЧ 2: рдорд┐рдирд┐рдореИрдХреНрд╕ + рдЕрд▓реНрдлрд╛ рдмреАрдЯрд╛ рдХреНрд▓рд┐рдкрд┐рдВрдЧ



рд╣рдордиреЗ рдореЛрдВрдЯреЗ рдХрд╛рд░реНрд▓реЛ рд╡рд┐рдзрд┐ рдХреА рдЬрд╛рдВрдЪ рдХреА , рдЖрдЬ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ 2048 рдореЗрдВ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рджрд┐рдорд╛рдЧ рдЕрд▓реНрдлрд╛-рдмреАрдЯрд╛ рд▓рдВрдШрди рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рдорд┐рдирд┐рдореИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

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

рд╕рдорд╛рдзрд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ stackoverflow рджреНрд╡рд╛рд░рд╛ рдкрд░ рдЬрд╛рд╕реВрд╕реА рдХреА рдУрд╡реЛрд▓реНрдпреВрдб , рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдПрдЖрдИ рдЦреЗрд▓ 2048 рдХреЛ рд╕рд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░реНрдЪрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред

Ovolve рд╕реЗ рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрд╡рд╛рдж
рдореИрдВ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд▓реЗрдЦрдХ рд╣реВрдВред рдЖрдк рдПрдЖрдИ рдХреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреЛрдб рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

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

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


рдПрдХрд░рд╕рддрд╛


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

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


рдЪрд┐рдХрдирд╛рдИ (рдЪрд┐рдХрдирд╛рдИ, рд╢рд╛рдо)


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

рд╣реИрдХрд░ рдиреНрдпреВрдЬ рдХреЗ рдПрдХ рдЯрд┐рдкреНрдкрдгреАрдХрд╛рд░ рдиреЗ рдЧреНрд░рд╛рдл рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдФрдкрдЪрд╛рд░рд┐рдХрд░рдг рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ред

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

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

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

рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЦреЗрд▓ рдореЗрдВ рдкреНрд░рдЧрддрд┐ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд╕рдорд╛рди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЬреА рдореЗрдВ рд╡рдЬрди 0. рд╣реЛрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдЖрдИ рдХреЛ рдХреБрд▓ рд╡рдЬрди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдВрдд рдореЗрдВ, рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рдЖрд╕рдиреНрди рдЯрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП AI рдЕрдВрддрд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдЯрд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдиреНрдп рдмрдбрд╝реА рдЯрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред

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


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

рдвреАрд▓реА рдЯрд╛рдЗрд▓реНрд╕


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

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


рдЫреЛрдЯрд╛ рд╕рд╛ рдмрджрд▓рд╛рд╡


рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рд╢рдХреНрддрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЯрд╛рдЗрд▓ рд╕реАрдорд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ (рддрд╛рдХрд┐ рд╡реЗ 2048 рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рдмрд╛рдж рднреА рдмрдврд╝рддреЗ рд░рд╣реЗрдВ), рдФрд░ рдпрд╣рд╛рдВ рдЖрда рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рдж рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред

рд╣рд╛рдВ, рдпрд╣ 2048 рдХреЗ рд╕рд╛рде 4096 рд╣реИред =) рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╡рд╣ рдПрдХ рдмреЛрд░реНрдб рдкрд░ рдорд╛рдпрд╛рд╡реА 2048 рдЯрд╛рдЗрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рд╣реИред







рдЕрд▓реНрдлрд╛-рдмреАрдЯрд╛ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рдФрд░ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдпреВрдЬрд░ рдУрд╡реЛрд▓реНрдпреВрд╢рди рд╕реЗ рд╕реНрдереИрддрд┐рдХ рдореВрд▓реНрдпрд╛рдВрдХрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдиреНрдпреВрдирддрдо рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд▓реЗрдЦ рдореЗрдВ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рдЕрд▓реНрдкрдорд╣рд┐рд╖реНрда


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


рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдПрдХ рдкреЗрдбрд╝ рдХрд╛ рдЯреБрдХрдбрд╝рд╛

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

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

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

рдпрд╣ рдиреНрдпреВрдирддрдо рд╣реИред

рдЕрд▓реНрдлрд╛ рдмреАрдЯрд╛ рдХрддрд░рди


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

рдХрд┐рд╕реЗ рджреЛрд╖ рджреЗрдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЬрдЯрд┐рд▓рддрд╛ рдкреВрд░реНрдг рдЯреНрд░реА рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдХреЗ рд▓рд┐рдП рджреЛрд╖реА рд╣реИ, рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдХрд╛рдЯрдХрд░ рд▓рдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдХрд▓реНрдк рдЯреНрд░реА рдХреА рдХреБрдЫ рд╢рд╛рдЦрд╛:

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

рддрдм рдЦрд┐рд▓рд╛рдбрд╝реА рдЗрд╕ рд╢рд╛рдЦрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрджрддрд░ рд╢рд╛рдЦрд╛ рд╕реЗ рдЙрдк-рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдФрд░ рд╕рдВрд╕рд╛рдзрди рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдЖрдкрдХреЛ рд╡рд┐рдХрд▓реНрдк рдкреЗрдбрд╝ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдкреНрд░рддрд┐рдкрд╛рджрди рдЧрд╣рд░рд╛рдИ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓ рд╢рд╛рдЦрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк рдХреЗ рдкреЗрдбрд╝ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдкрд░ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдЦрд┐рд▓рд╛рдбрд╝реА рджреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрджрд▓рддреЗ рдЧреБрдгрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ - рдЕрд▓реНрдлрд╛ (рдПрд╕рдПрдлрдбреА рдХрд╛ рдореВрд▓реНрдп рдЬреЛ рд╢рд╛рдЦрд╛ рдореЗрдВ рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╛рдиреА рдиреНрдпреВрдирддрдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓) рдФрд░ рдмреАрдЯрд╛ (рдПрд╕рдПрдлрдбреА рдХрд╛ рдореВрд▓реНрдп рдЬреЛ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ - i.e. рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓)ред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдкрд░, рдЕрд▓реНрдлрд╛ рдФрд░ рдмреАрдЯрд╛ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ SFD рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рд╕реНрд╡реАрдк рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ (рдЙрдиреНрд╣реЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧрдгрдирд╛ рдХрд┐рдП рдмрд┐рдирд╛) рд╢рд╛рдЦрд╛рдПрдВ рдЬреЛ рдЙрд╕ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдХрдо рдлрд╛рдпрджреЗрдордВрдж рд╣реЛрддреА рд╣реИрдВ рдЬреЛ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреА рд╣реИрдВ рдФрд░ / рдпрд╛ рдЕрдкрдиреЗ рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдлрд╛рдпрджреЗрдордВрдж рд╣реЛрддреА рд╣реИрдВред

рдпрд╣ рдЕрд▓реНрдлрд╛ рдмреАрдЯрд╛ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рд╣реИред

рдЕрд▓реНрдлрд╛ рдмреАрдЯрд╛ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд░рд┐рдХрд░реНрд╕рд┐рд╡ рдорд┐рдирд┐рдореИрдХреНрд╕ рдлрдВрдХреНрд╢рди


рдПрдЖрдИ рдХреЗ рд╕рд╛рде 2048 рдХреЛ рд╡реАрдмреАрдП рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╣реИ рдХрд┐ рдЕрд▓реНрдлрд╛ рдмреАрдЯрд╛ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдорд┐рдирд┐рдореИрдХреНрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ рддреБрдЪреНрдЫ рджреГрд╢реНрдп рдореВрд▓ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''( - )''''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '       -- 'Position -  4  4     'Depth - ,    'Alpha, Beta -         'MaximisingPlayer -      ? Private Function MiniMaxAlpaBeta_Evaluation(Position As Variant, Depth As Long, _ Alpha As Double, Beta As Double, _ MaximisingPlayer As Boolean, _ Optional MainLevel As Boolean = False) As Double Dim MaxEval As Double '  Dim MinEval As Double '  Dim PositionNext As Variant '     Dim PositionTemp As Variant '     Dim Eval As Double '   Dim Way As Long '   -      Dim Row As Long '     Dim Col As Long '     Dim TileNew As Long '      '   (  ,  '     ) If GameOverPosition(Position) Then '    ? '     MiniMaxAlpaBeta_Evaluation = -1000000 + TileMax(Position) '         ElseIf Depth = 0 Then '     MiniMaxAlpaBeta_Evaluation = StaticEvaluation(Position) '  ,    '     () ElseIf MaximisingPlayer Then MaxEval = -1000000 '      For Way = 1 To 4 ' 4   - (, , , ) ChangeCount = 0 ' ,      ',       PositionNext = StepHuman(Position, Way) If ChangeCount > 0 Then '     '      , '    () Eval = MiniMaxAlpaBeta_Evaluation(PositionNext, Depth - 1, _ Alpha, Beta, False) If Eval > MaxEval Then MaxEval = Eval '  '     If Eval > Alpha Then Alpha = Eval '    ,   '   -    If Beta > Alpha Then Exit For End If Next '          MiniMaxAlpaBeta_Evaluation = MaxEval '  ,    '     () Else 'Not MaximisingPlayer MinEval = 1000000 '      For Row = 1 To 4 '     For Col = 1 To 4 '     If Position(Row, Col) = 0 Then '   For TileNew = 2 To 4 Step 2 '    2  4 ',       '    PositionNext = StepComp(Position, Row, Col, TileNew) '     , '    () Eval = MiniMaxAlpaBeta_Evaluation(PositionNext, Depth - 1, _ Alpha, Beta, True) If Eval < MinEval Then MinEval = Eval '  '     If Eval < Beta Then Beta = Eval '    ,   '   -    If Alpha < Beta Then Exit For Next End If Next Next '          MiniMaxAlpaBeta_Evaluation = MinEval End If End Function 

рдЬрд╛рд╡рд╛-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдУрд╡реНрдпреВрд▓реЗрд╢рди рдХреЛрдб
 function AI(grid) { this.grid = grid; } //   () AI.prototype.eval = function() { var emptyCells = this.grid.availableCells().length; var smoothWeight = 0.1, //monoWeight = 0.0, //islandWeight = 0.0, mono2Weight = 1.0, emptyWeight = 2.7, maxWeight = 1.0; return this.grid.smoothness() * smoothWeight //+ this.grid.monotonicity() * monoWeight //- this.grid.islands() * islandWeight + this.grid.monotonicity2() * mono2Weight + Math.log(emptyCells) * emptyWeight + this.grid.maxValue() * maxWeight; }; // alpha-beta depth first search AI.prototype.search = function(depth, alpha, beta, positions, cutoffs) { var bestScore; var bestMove = -1; var result; // the maxing player if (this.grid.playerTurn) { bestScore = alpha; for (var direction in [0, 1, 2, 3]) { var newGrid = this.grid.clone(); if (newGrid.move(direction).moved) { positions++; if (newGrid.isWin()) { return { move: direction, score: 10000, positions: positions, cutoffs: cutoffs }; } var newAI = new AI(newGrid); if (depth == 0) { result = { move: direction, score: newAI.eval() }; } else { result = newAI.search(depth-1, bestScore, beta, positions, cutoffs); if (result.score > 9900) { // win result.score--; // to slightly penalize higher depth from win } positions = result.positions; cutoffs = result.cutoffs; } if (result.score > bestScore) { bestScore = result.score; bestMove = direction; } if (bestScore > beta) { cutoffs++ return { move: bestMove, score: beta, positions: positions, cutoffs: cutoffs }; } } } } else { // computer's turn, we'll do heavy pruning to keep the branching factor low bestScore = beta; // try a 2 and 4 in each cell and measure how annoying it is // with metrics from eval var candidates = []; var cells = this.grid.availableCells(); var scores = { 2: [], 4: [] }; for (var value in scores) { for (var i in cells) { scores[value].push(null); var cell = cells[i]; var tile = new Tile(cell, parseInt(value, 10)); this.grid.insertTile(tile); scores[value][i] = -this.grid.smoothness() + this.grid.islands(); this.grid.removeTile(cell); } } // now just pick out the most annoying moves var maxScore = Math.max(Math.max.apply(null, scores[2]), Math.max.apply(null, scores[4])); for (var value in scores) { // 2 and 4 for (var i=0; i<scores[value].length; i++) { if (scores[value][i] == maxScore) { candidates.push( { position: cells[i], value: parseInt(value, 10) } ); } } } // search on each candidate for (var i=0; i<candidates.length; i++) { var position = candidates[i].position; var value = candidates[i].value; var newGrid = this.grid.clone(); var tile = new Tile(position, value); newGrid.insertTile(tile); newGrid.playerTurn = true; positions++; newAI = new AI(newGrid); result = newAI.search(depth, alpha, bestScore, positions, cutoffs); positions = result.positions; cutoffs = result.cutoffs; if (result.score < bestScore) { bestScore = result.score; } if (bestScore < alpha) { cutoffs++; return { move: null, score: alpha, positions: positions, cutoffs: cutoffs }; } } } return { move: bestMove, score: bestScore, positions: positions, cutoffs: cutoffs }; } // performs a search and returns the best move AI.prototype.getBest = function() { return this.iterativeDeep(); } // performs iterative deepening over the alpha-beta search AI.prototype.iterativeDeep = function() { var start = (new Date()).getTime(); var depth = 0; var best; do { var newBest = this.search(depth, -10000, 10000, 0 ,0); if (newBest.move == -1) { break; } else { best = newBest; } depth++; } while ( (new Date()).getTime() - start < minSearchTime); return best } AI.prototype.translate = function(move) { return { 0: 'up', 1: 'right', 2: 'down', 3: 'left' }[move]; } 

рд╕реНрдереИрддрд┐рдХ рдореВрд▓реНрдпрд╛рдВрдХрди рд╕рдорд╛рд░реЛрд╣


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

рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдзрд┐рдХрддрдо рдЦрд┐рд▓рд╛рдбрд╝реА рд╡рд╣ рд╡реНрдпрдХреНрддрд┐ (рдпрд╛ рдПрдЖрдИ) рд╣реИ рдЬреЛ рд╕рднреА рдЯрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 4 рджрд┐рд╢рд╛рдУрдВ (рдКрдкрд░, рдмрд╛рдПрдВ, рджрд╛рдПрдВ, рдиреАрдЪреЗ) рдореЗрдВ рд╕реЗ рдХреМрди рддрдп рдХрд░рддрд╛ рд╣реИред рдПрдХ рдиреНрдпреВрдирддрдо рдЦрд┐рд▓рд╛рдбрд╝реА рд╡рд╣ рдХрдкрдЯреА рд╕рдмрд░реВрдЯреАрди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рдЕрдиреБрдЪрд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдЕрдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ 2 рдпрд╛ 4 рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

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

2048 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ - рдЯрд╛рдЗрд▓реНрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рдХрд╛рд░рдХ рдЕрдиреБрдХреВрд▓ рдорд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ?

рдПрдХрд░рд╕рддрд╛


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

рд╕рд╛рдЗрдмреЗрд░рд┐рдпрд╛рдИ рд╕рдВрдШреАрдп рдЬрд┐рд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рд╕рднреА 4 рджрд┐рд╢рд╛рдУрдВ (рдКрдкрд░-рдиреАрдЪреЗ, рдмрд╛рдПрдВ-рд╕реЗ-рджрд╛рдПрдВ, рджрд╛рдПрдВ-рдмрд╛рдПрдВ, рдиреАрдЪреЗ-рдКрдкрд░) рдореЗрдВ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЯрд╛рдЗрд▓ рдХрд╣рд╛рдВ рдШрдЯ рд░рд╣реА рд╣реИ рдпрд╛ рдкреНрд░рдЧрддрд┐ рдмрдврд╝ рд░рд╣реА рд╣реИред рдпрджрд┐ рдкреНрд░рдЧрддрд┐ рдореЗрдВ рдРрд╕реА рдЯрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХрд░рд╕рддрд╛ рдХреЗ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЧреБрдгрд╛рдВрдХ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░, рд╕рднреА рджрд┐рд╢рд╛рдУрдВ рдХреЗ рд▓рд┐рдП 4 рдЧреБрдгрд╛рдВрдХ рд╕реЗ, рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рд╛рдЗрдмреЗрд░рд┐рдпрд╛рдИ рд╕рдВрдШреАрдп рдЬрд┐рд▓реЗ рдХреЗ рдХреБрд▓ рдореВрд▓реНрдп рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЪрд┐рдХрдирд╛рдИ


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЯрд╛рдЗрд▓реНрд╕ рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЦрдбрд╝реЗ рд╣реЛрдиреЗ рд╕реЗ рдкреНрд░рдЧрддрд┐ рдХреЗрд╡рд▓ рдмрдврд╝рддреА рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдЧреИрд░-рдШрдЯрддреА рд╣реИ (рдпрд╛ рдкрдВрдХреНрддрд┐ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдЧреИрд░-рд╡реГрджреНрдзрд┐ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ), рдЕрд░реНрдерд╛рдд, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм рдПрдХ рд╣реА рдЯрд╛рдЗрд▓ рдкрд╛рд╕ рд╣реЛ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдореЗрдВ рдврд╣рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЕрдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдкрд░ рдЦрд╛рд▓реА рд╕реНрдерд╛рди рдмрдврд╝рд╛рдирд╛ред

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

рдЦрд╛рд▓реА рд╕реЗрд▓


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

SFO рдореИрджрд╛рди рдкрд░ рдЦрд╛рд▓реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдорд╛рдирддрд╛ рд╣реИ рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХ, рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд▓рд╛рднрджрд╛рдпрдХ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдзрд┐рдХрддрдо рдЯрд╛рдЗрд▓


рдЪреВрдВрдХрд┐ рдЗрд╕ рдЦреЗрд▓ рдореЗрдВ рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореИрджрд╛рди рдкрд░ рдПрдХ рдмрдбрд╝реА рдЯрд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдП, рддреЛ рдЕрдзрд┐рдХ рдмреЗрд╣рддрд░ рд╣реИ - 2048, 4096, 8192 (рдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЬреЛ рднреА рд╢рдХреНрддрд┐ рдФрд░ рдзреИрд░реНрдп рд╣реИ), рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЬрд╣рд╛рдВ рдЕрдзрд┐рдХрддрдо рдЯрд╛рдЗрд▓ рдореВрд▓реНрдп рдЕрдзрд┐рдХ рд╣реИ рдЙрдиреНрд╣реЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рднрджрд╛рдпрдХ SFD рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

2048 рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдмреЗрд░рд┐рдпрд╛рдИ рд╕рдВрдШреАрдп рдЬрд┐рд▓рд╛


VBA рдореИрдХреНрд░реЛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдЗрдмреЗрд░рд┐рдпрд╛рдИ рд╕рдВрдШреАрдп рдЬрд┐рд▓реЗ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''  '''''''''''''''''''''''' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '     'Position -  4  4     Private Function StaticEvaluation(Position As Variant) As Double Dim Smoothness As Double ' Dim Monotonicity As Double ' Dim EmptyCount As Double '  Dim MaxValue As Long '  '   Const SmoothWeight = 0.1 Const MonoWeight = 1 Const EmptyWeight = 2.7 Const MaxWeight = 1 Dim k As Long '   Dim i As Long '  Dim j As Long '  Dim x As Long '  Dim y As Long '  ' Dim Value As Double '       '         Dim TargetValue As Double Smoothness = 0 '    For i = 1 To 4 '     For j = 1 To 4 '     If Position(i, j) > 0 Then '   Value = Log(Position(i, j)) / Log(2) If i < 4 Then '       For x = i + 1 To 4 '    If Position(x, j) > 0 Then '    '    TargetValue = Log(Position(x, j)) / Log(2) ',   Smoothness = Abs(Value - TargetValue) '       Exit For End If Next End If If j < 4 Then '       For y = j + 1 To 4 '    If Position(i, y) > 0 Then '    '    TargetValue = Log(Position(i, y)) / Log(2) ',   Smoothness = Abs(Value - TargetValue) '        Exit For End If Next End If End If Next Next ' Dim arrTotals(1 To 4) As Double '     Dim Current As Long '   Dim Next_ As Long '      Dim CurrentValue As Double '      Dim NextValue As Double '        Monotonicity = 0 '    '      For k = 1 To 4 arrTotals(k) = 0 Next ' -  - For x = 1 To 4 '   Current = 1 '      '   (     )  Next_ = Current + 1 Do While Next_ <= 4 '       '      '(       ) Do While Next_ <= 4 '       If Position(x, Next_) = 0 Then '     Next_ = Next_ + 1 '   Else ' -    Exit Do ' ,  ,   End If Loop '         If Next_ > 4 Then Next_ = 4 '          If Position(x, Current) > 0 Then CurrentValue = Log(Position(x, Current)) / Log(2) Else CurrentValue = 0 End If ' MsgBox "Position[" & x & ", " & Next_ & "]=" & Position(x, Next_) If Position(x, Next_) > 0 Then NextValue = Log(Position(x, Next_)) / Log(2) Else NextValue = 0 End If If CurrentValue > NextValue Then '   ? arrTotals(Up) = arrTotals(Up) + NextValue - CurrentValue ElseIf NextValue > CurrentValue Then '   ? arrTotals(Down) = arrTotals(Down) + CurrentValue - NextValue End If Current = Next_ '       Next_ = Next_ + 1 '    Loop Next '      -  - Monotonicity = IIf(arrTotals(Up) >= arrTotals(Down), _ Monotonicity + arrTotals(Up), _ Monotonicity + arrTotals(Down)) ' -  - For y = 1 To 4 '   Current = 1 '      '   (     )  Next_ = Current + 1 Do While Next_ <= 4 '       '      '(       ) Do While Next_ <= 4 '       If Position(Next_, y) = 0 Then '     Next_ = Next_ + 1 '   Else ' -    Exit Do ' ,  ,   End If Loop '         If Next_ > 4 Then Next_ = 4 '          If Position(Current, y) > 0 Then CurrentValue = Log(Position(Current, y)) / Log(2) Else CurrentValue = 0 End If If Position(Next_, y) > 0 Then NextValue = Log(Position(Next_, y)) / Log(2) Else NextValue = 0 End If If CurrentValue > NextValue Then '   ? arrTotals(Left) = arrTotals(Left) + NextValue - CurrentValue ElseIf NextValue > CurrentValue Then '   ? arrTotals(Right) = arrTotals(Right) + CurrentValue - NextValue End If Current = Next_ '       Next_ = Next_ + 1 '    Loop Next '      -  - Monotonicity = IIf(arrTotals(Left) >= arrTotals(Right), _ Monotonicity + arrTotals(Left), _ Monotonicity + arrTotals(Right)) '     EmptyCount = 0 '      MaxValue = 0 '    For i = 1 To 4 '     For j = 1 To 4 '     If Position(i, j) = 0 Then '  ... '...     EmptyCount = EmptyCount + 1 '     ... ElseIf Position(i, j) > MaxValue Then MaxValue = Position(i, j) '...    End If Next Next '   StaticEvaluation = Smoothness * SmoothWeight + _ Monotonicity * MonoWeight + _ Log_Base_Arg(EmptyCount) * EmptyWeight + _ MaxValue * MaxWeight End Function 

рдЬрд╛рд╡рд╛-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдУрд╡реНрдпреВрд▓реЗрд╢рди рдХреЛрдб
 function Grid(size) { this.size = size; this.startTiles = 2; this.cells = []; this.build(); this.playerTurn = true; } // pre-allocate these objects (for speed) Grid.prototype.indexes = []; for (var x=0; x<4; x++) { Grid.prototype.indexes.push([]); for (var y=0; y<4; y++) { Grid.prototype.indexes[x].push( {x:x, y:y} ); } } // Build a grid of the specified size Grid.prototype.build = function () { for (var x = 0; x < this.size; x++) { var row = this.cells[x] = []; for (var y = 0; y < this.size; y++) { row.push(null); } } }; // Find the first available random position Grid.prototype.randomAvailableCell = function () { var cells = this.availableCells(); if (cells.length) { return cells[Math.floor(Math.random() * cells.length)]; } }; Grid.prototype.availableCells = function () { var cells = []; var self = this; this.eachCell(function (x, y, tile) { if (!tile) { //cells.push(self.indexes[x][y]); cells.push( {x:x, y:y} ); } }); return cells; }; // Call callback for every cell Grid.prototype.eachCell = function (callback) { for (var x = 0; x < this.size; x++) { for (var y = 0; y < this.size; y++) { callback(x, y, this.cells[x][y]); } } }; // Check if there are any cells available Grid.prototype.cellsAvailable = function () { return !!this.availableCells().length; }; // Check if the specified cell is taken Grid.prototype.cellAvailable = function (cell) { return !this.cellOccupied(cell); }; Grid.prototype.cellOccupied = function (cell) { return !!this.cellContent(cell); }; Grid.prototype.cellContent = function (cell) { if (this.withinBounds(cell)) { return this.cells[cell.x][cell.y]; } else { return null; } }; // Inserts a tile at its position Grid.prototype.insertTile = function (tile) { this.cells[tile.x][tile.y] = tile; }; Grid.prototype.removeTile = function (tile) { this.cells[tile.x][tile.y] = null; }; Grid.prototype.withinBounds = function (position) { return position.x >= 0 && position.x < this.size && position.y >= 0 && position.y < this.size; }; Grid.prototype.clone = function() { newGrid = new Grid(this.size); newGrid.playerTurn = this.playerTurn; for (var x = 0; x < this.size; x++) { for (var y = 0; y < this.size; y++) { if (this.cells[x][y]) { newGrid.insertTile(this.cells[x][y].clone()); } } } return newGrid; }; // Set up the initial tiles to start the game with Grid.prototype.addStartTiles = function () { for (var i=0; i<this.startTiles; i++) { this.addRandomTile(); } }; // Adds a tile in a random position Grid.prototype.addRandomTile = function () { if (this.cellsAvailable()) { var value = Math.random() < 0.9 ? 2 : 4; //var value = Math.random() < 0.9 ? 256 : 512; var tile = new Tile(this.randomAvailableCell(), value); this.insertTile(tile); } }; // Save all tile positions and remove merger info Grid.prototype.prepareTiles = function () { this.eachCell(function (x, y, tile) { if (tile) { tile.mergedFrom = null; tile.savePosition(); } }); }; // Move a tile and its representation Grid.prototype.moveTile = function (tile, cell) { this.cells[tile.x][tile.y] = null; this.cells[cell.x][cell.y] = tile; tile.updatePosition(cell); }; Grid.prototype.vectors = { 0: { x: 0, y: -1 }, // up 1: { x: 1, y: 0 }, // right 2: { x: 0, y: 1 }, // down 3: { x: -1, y: 0 } // left } // Get the vector representing the chosen direction Grid.prototype.getVector = function (direction) { // Vectors representing tile movement return this.vectors[direction]; }; // Move tiles on the grid in the specified direction // returns true if move was successful Grid.prototype.move = function (direction) { // 0: up, 1: right, 2:down, 3: left var self = this; var cell, tile; var vector = this.getVector(direction); var traversals = this.buildTraversals(vector); var moved = false; var score = 0; var won = false; // Save the current tile positions and remove merger information this.prepareTiles(); // Traverse the grid in the right direction and move tiles traversals.x.forEach(function (x) { traversals.y.forEach(function (y) { cell = self.indexes[x][y]; tile = self.cellContent(cell); if (tile) { //if (debug) { //console.log('tile @', x, y); //} var positions = self.findFarthestPosition(cell, vector); var next = self.cellContent(positions.next); // Only one merger per row traversal? if (next && next.value === tile.value && !next.mergedFrom) { var merged = new Tile(positions.next, tile.value * 2); merged.mergedFrom = [tile, next]; self.insertTile(merged); self.removeTile(tile); // Converge the two tiles' positions tile.updatePosition(positions.next); // Update the score score += merged.value; // The mighty 2048 tile if (merged.value === 2048) { won = true; } } else { //if (debug) { //console.log(cell); //console.log(tile); //} self.moveTile(tile, positions.farthest); } if (!self.positionsEqual(cell, tile)) { self.playerTurn = false; //console.log('setting player turn to ', self.playerTurn); moved = true; // The tile moved from its original cell! } } }); }); //console.log('returning, playerturn is', self.playerTurn); //if (!moved) { //console.log('cell', cell); //console.log('tile', tile); //console.log('direction', direction); //console.log(this.toString()); //} return {moved: moved, score: score, won: won}; }; Grid.prototype.computerMove = function() { this.addRandomTile(); this.playerTurn = true; } // Build a list of positions to traverse in the right order Grid.prototype.buildTraversals = function (vector) { var traversals = { x: [], y: [] }; for (var pos = 0; pos < this.size; pos++) { traversals.x.push(pos); traversals.y.push(pos); } // Always traverse from the farthest cell in the chosen direction if (vector.x === 1) traversals.x = traversals.x.reverse(); if (vector.y === 1) traversals.y = traversals.y.reverse(); return traversals; }; Grid.prototype.findFarthestPosition = function (cell, vector) { var previous; // Progress towards the vector direction until an obstacle is found do { previous = cell; cell = { x: previous.x + vector.x, y: previous.y + vector.y }; } while (this.withinBounds(cell) && this.cellAvailable(cell)); return { farthest: previous, next: cell // Used to check if a merge is required }; }; Grid.prototype.movesAvailable = function () { return this.cellsAvailable() || this.tileMatchesAvailable(); }; // Check for available matches between tiles (more expensive check) // returns the number of matches Grid.prototype.tileMatchesAvailable = function () { var self = this; //var matches = 0; var tile; for (var x = 0; x < this.size; x++) { for (var y = 0; y < this.size; y++) { tile = this.cellContent({ x: x, y: y }); if (tile) { for (var direction = 0; direction < 4; direction++) { var vector = self.getVector(direction); var cell = { x: x + vector.x, y: y + vector.y }; var other = self.cellContent(cell); if (other && other.value === tile.value) { return true; //matches++; // These two tiles can be merged } } } } } //console.log(matches); return false; //matches; }; Grid.prototype.positionsEqual = function (first, second) { return first.x === second.x && first.y === second.y; }; Grid.prototype.toString = function() { string = ''; for (var i=0; i<4; i++) { for (var j=0; j<4; j++) { if (this.cells[j][i]) { string += this.cells[j][i].value + ' '; } else { string += '_ '; } } string += '\n'; } return string; } // counts the number of isolated groups. Grid.prototype.islands = function() { var self = this; var mark = function(x, y, value) { if (x >= 0 && x <= 3 && y >= 0 && y <= 3 && self.cells[x][y] && self.cells[x][y].value == value && !self.cells[x][y].marked ) { self.cells[x][y].marked = true; for (direction in [0,1,2,3]) { var vector = self.getVector(direction); mark(x + vector.x, y + vector.y, value); } } } var islands = 0; for (var x=0; x<4; x++) { for (var y=0; y<4; y++) { if (this.cells[x][y]) { this.cells[x][y].marked = false } } } for (var x=0; x<4; x++) { for (var y=0; y<4; y++) { if (this.cells[x][y] && !this.cells[x][y].marked) { islands++; mark(x, y , this.cells[x][y].value); } } } return islands; } // measures how smooth the grid is (as if the values of the pieces // were interpreted as elevations). Sums of the pairwise difference // between neighboring tiles (in log space, so it represents the // number of merges that need to happen before they can merge). // Note that the pieces can be distant Grid.prototype.smoothness = function() { var smoothness = 0; for (var x=0; x<4; x++) { for (var y=0; y<4; y++) { if ( this.cellOccupied( this.indexes[x][y] )) { var value = Math.log(this.cellContent( this.indexes[x][y] ).value) / Math.log(2); for (var direction=1; direction<=2; direction++) { var vector = this.getVector(direction); var targetCell = this.findFarthestPosition(this.indexes[x][y], vector).next; if (this.cellOccupied(targetCell)) { var target = this.cellContent(targetCell); var targetValue = Math.log(target.value) / Math.log(2); smoothness -= Math.abs(value - targetValue); } } } } } return smoothness; } Grid.prototype.monotonicity = function() { var self = this; var marked = []; var queued = []; var highestValue = 0; var highestCell = {x:0, y:0}; for (var x=0; x<4; x++) { marked.push([]); queued.push([]); for (var y=0; y<4; y++) { marked[x].push(false); queued[x].push(false); if (this.cells[x][y] && this.cells[x][y].value > highestValue) { highestValue = this.cells[x][y].value; highestCell.x = x; highestCell.y = y; } } } increases = 0; cellQueue = [highestCell]; queued[highestCell.x][highestCell.y] = true; markList = [highestCell]; markAfter = 1; // only mark after all queued moves are done, as if searching in parallel var markAndScore = function(cell) { markList.push(cell); var value; if (self.cellOccupied(cell)) { value = Math.log(self.cellContent(cell).value) / Math.log(2); } else { value = 0; } for (direction in [0,1,2,3]) { var vector = self.getVector(direction); var target = { x: cell.x + vector.x, y: cell.y+vector.y } if (self.withinBounds(target) && !marked[target.x][target.y]) { if ( self.cellOccupied(target) ) { targetValue = Math.log(self.cellContent(target).value ) / Math.log(2); if ( targetValue > value ) { //console.log(cell, value, target, targetValue); increases += targetValue - value; } } if (!queued[target.x][target.y]) { cellQueue.push(target); queued[target.x][target.y] = true; } } } if (markAfter == 0) { while (markList.length > 0) { var cel = markList.pop(); marked[cel.x][cel.y] = true; } markAfter = cellQueue.length; } } while (cellQueue.length > 0) { markAfter--; markAndScore(cellQueue.shift()) } return -increases; } // measures how monotonic the grid is. This means the values of the tiles are strictly increasing // or decreasing in both the left/right and up/down directions Grid.prototype.monotonicity2 = function() { // scores for all four directions var totals = [0, 0, 0, 0]; // up/down direction for (var x=0; x<4; x++) { var current = 0; var next = current+1; while ( next<4 ) { while ( next<4 && !this.cellOccupied( this.indexes[x][next] )) { next++; } if (next>=4) { next--; } var currentValue = this.cellOccupied({x:x, y:current}) ? Math.log(this.cellContent( this.indexes[x][current] ).value) / Math.log(2) : 0; var nextValue = this.cellOccupied({x:x, y:next}) ? Math.log(this.cellContent( this.indexes[x][next] ).value) / Math.log(2) : 0; if (currentValue > nextValue) { totals[0] += nextValue - currentValue; } else if (nextValue > currentValue) { totals[1] += currentValue - nextValue; } current = next; next++; } } // left/right direction for (var y=0; y<4; y++) { var current = 0; var next = current+1; while ( next<4 ) { while ( next<4 && !this.cellOccupied( this.indexes[next][y] )) { next++; } if (next>=4) { next--; } var currentValue = this.cellOccupied({x:current, y:y}) ? Math.log(this.cellContent( this.indexes[current][y] ).value) / Math.log(2) : 0; var nextValue = this.cellOccupied({x:next, y:y}) ? Math.log(this.cellContent( this.indexes[next][y] ).value) / Math.log(2) : 0; if (currentValue > nextValue) { totals[2] += nextValue - currentValue; } else if (nextValue > currentValue) { totals[3] += currentValue - nextValue; } current = next; next++; } } return Math.max(totals[0], totals[1]) + Math.max(totals[2], totals[3]); } Grid.prototype.maxValue = function() { var max = 0; for (var x=0; x<4; x++) { for (var y=0; y<4; y++) { if (this.cellOccupied(this.indexes[x][y])) { var value = this.cellContent(this.indexes[x][y]).value; if (value > max) { max = value; } } } } return Math.log(max) / Math.log(2); } // WIP. trying to favor top-heavy distributions (force consolidation of higher value tiles) /* Grid.prototype.valueSum = function() { var valueCount = []; for (var i=0; i<11; i++) { valueCount.push(0); } for (var x=0; x<4; x++) { for (var y=0; y<4; y++) { if (this.cellOccupied(this.indexes[x][y])) { valueCount[Math.log(this.cellContent(this.indexes[x][y]).value) / Math.log(2)]++; } } } var sum = 0; for (var i=1; i<11; i++) { sum += valueCount[i] * Math.pow(2, i) + i; } return sum; } */ // check for win Grid.prototype.isWin = function() { var self = this; for (var x=0; x<4; x++) { for (var y=0; y<4; y++) { if (self.cellOccupied(this.indexes[x][y])) { if (self.cellContent(this.indexes[x][y]).value == 2048) { return true; } } } } return false; } //Grid.prototype.zobristTable = {} //for //Grid.prototype.hash = function() { //} 

2048.xlsm


рдПрдХреНрд╕реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ Google рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдЖрд╡реЗрджрди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЬрд╣рд╛рдВ рдПрдЖрдИ рдореЛрдВрдЯреЗ рдХрд╛рд░реНрд▓реЛ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреЗрд▓рддрд╛ рд╣реИ ред рдЖрдЬ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдореМрдЬреВрджрд╛ рдореЛрдВрдЯреЗ рдХрд╛рд░реНрд▓реЛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

рдПрдЖрдИ рдФрд░ 2048 рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рднреА рд▓реЗрдЦ


  • рдореЛрдВрдЯреЗ рдХрд╛рд░реНрд▓реЛ
  • рдорд┐рдиреАрдореИрдХреНрд╕ + рдЕрд▓реНрдлрд╛ рдмреАрдЯрд╛ рдХреНрд▓рд┐рдкрд┐рдВрдЧ
  • рдЕрдзрд┐рдХрддрдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ
  • рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ

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


All Articles