BlessRNG рд╡рд╛ рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ RNG рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ

BlessRNG рд╡рд╛ рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ RNG рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ

рдЦреЗрд▓рдХреЛ рд╡рд┐рдХрд╛рд╕рдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рд╛рдпрдГ рдЕрдирд┐рдпрдорд┐рддрддрд╛рд╕рдБрдЧ рдХреЗрд╣рд┐ рдЬреЛрдбреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ: рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХрддрд╛рдХреЛ рдЖрдлреНрдиреИ рд░реНрдпрд╛рдиреНрдбрдо рдЫ, рд░ рдпрд╕рдХреЛ рд╕рд╛рдердорд╛ рддреНрдпрд╣рд╛рдБ System.Random рдЫред рдПрдХ рдкрдЯрдХ, рдПрдЙрдЯрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛, рдореИрд▓реЗ рджреБрд╡реИ рдлрд░рдХ рддрд░рд┐рдХрд╛рд▓реЗ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдЫрдиреН рднрдиреНрдиреЗ рдзрд╛рд░рдгрд╛ рдкрд╛рдПрдБ (рдпрджреНрдпрдкрд┐ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рд╕рдорд╛рди рд╡рд┐рддрд░рдг рд╣реБрдиреБрдкрд░реНрдЫ)ред

рддреНрдпрд╕рдкрдЫрд┐ рддрд┐рдиреАрд╣рд░реВ рд╡рд┐рд╡рд░рдгрд╣рд░реВрдорд╛ рдЧрдПрдирдиреН - рдпреЛ рдкрд░реНрдпрд╛рдкреНрдд рдерд┐рдпреЛ рдХрд┐ System.Random рдорд╛ рд╕рдВрдХреНрд░рдордг рд╕рдмреИ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдЪреНрдпрд╛рдпреЛред рдЕрдм рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рдердк рд╡рд┐рд╕реНрддрд╛рд░рдорд╛ рд╣реЗрд░реНрдиреЗ рд░ рдереЛрд░реИ рдЕрдиреБрд╕рдиреНрдзрд╛рди рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ: рдХрд╕рд░реА "рдкрдХреНрд╖рдкрд╛рддреА" рд╡рд╛ рдЕрдиреБрдорд╛рдирд┐рдд RNG рд╣рд░реВ рдЫрдиреН, рд░ рдХреБрди рдЫрдиреМрдЯ рдЧрд░реНрдиреЗред рдпрд╕рдмрд╛рд╣реЗрдХ, рдореИрд▓реЗ рдЙрдиреАрд╣рд░реВрдХреЛ "рдЗрдорд╛рдиреНрджрд╛рд░рд┐рддрд╛" рдХреЛ рдмрд╛рд░реЗ рдорд╛ рд╡рд┐рд╡рд╛рджрд╛рд╕реНрдкрдж рд╡рд┐рдЪрд╛рд░рд╣рд░реВ рдПрдХ рдкрдЯрдХ рднрдиреНрджрд╛ рдмрдвреА рд╕реБрдиреЗрдХреЛ рдЫреБ - рдЖрдЙрдиреБрд╣реЛрд╕реН рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдШреЛрд╖рдгрд╛ рдЧрд░рд┐рдПрдХрд╛рд╣рд░реВрд╕рдБрдЧ рдХрд╕рд░реА рддреБрд▓рдирд╛ рдЧрд░реНрдЫрдиреН рднрдиреЗрд░ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВред

рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╢реИрдХреНрд╖рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд╛ RNG рд╡рд╛рд╕реНрддрд╡рдорд╛ RNG рд╣реЛ

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЕрдирд┐рдпрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░рд╣рд░реВрд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рдкрд░рд┐рдЪрд┐рдд рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рддреБрд░реБрдиреНрддреИ "рдкрд░реАрдХреНрд╖рдг" рд╕реЗрдХреНрд╕рдирдорд╛ рдЬрд╛рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдЕрдирд┐рдпрдорд┐рдд рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ (RN) рдХреБрдиреИ рдЕрдирд┐рдпрдорд┐рдд (рдЕрд░рд╛рдЬрдХ) рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдПрдиреНрдЯреНрд░реЛрдкреАрдХреЛ рд╕реНрд░реЛрдд рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЙрддреНрдкрдиреНрди рд╣реБрдиреЗ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо рд╣реЛред рдЕрд░реНрдерд╛рддреН, рдпреЛ рдПрдЙрдЯрд╛ рдЕрдиреБрдХреНрд░рдо рд╣реЛ рдЬрд╕рдХреЛ рддрддреНрд╡рд╣рд░реВ рдХреБрдиреИ рдкрдирд┐ рдЧрдгрд┐рддреАрдп рдирд┐рдпрдорджреНрд╡рд╛рд░рд╛ рдЖрдкрд╕рдорд╛ рдЬреЛрдбрд┐рдПрдХрд╛ рдЫреИрдирдиреН - рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдХреБрдиреИ рдХрд╛рд░рдг рд░ рдкреНрд░рднрд╛рд╡ рд╕рдореНрдмрдиреНрдз рдЫреИрдиред

рдЕрдирд┐рдпрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдХреБрд░рд╛рд▓рд╛рдИ рдЕрдирд┐рдпрдорд┐рдд рдирдореНрдмрд░ рдЬрдирд░реЗрдЯрд░ (RNG) рднрдирд┐рдиреНрдЫред рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ рд╕рдмреИ рдХреБрд░рд╛ рдкреНрд░рд╛рдердорд┐рдХ рдЫ, рддрд░ рдпрджрд┐ рд╣рд╛рдореА рд╕рд┐рджреНрдзрд╛рдиреНрддрдмрд╛рдЯ рдЕрднреНрдпрд╛рд╕рдорд╛ рдЬрд╛рдиреНрдЫреМрдВ рднрдиреЗ, рд╡рд╛рд╕реНрддрд╡рдорд╛ рдпрд╕реНрддреЛ рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рд╕рдлреНрдЯрд╡реЗрдпрд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫреИрдиред

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

рдпреЛ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓реЗрдЦреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬреБрди рдлрд┐рд░реНрддрд╛ рд╣реБрдиреЗрдЫ, рдпрджреНрдпрдкрд┐ рд╕рд╛рдБрдЪреНрдЪреИ рдЕрдирд┐рдпрдорд┐рдд рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ рд╣реЛрдЗрди, рддрд░ рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рд╕рдореНрднрд╡ рднрдПрд╕рдореНрдо рдирдЬрд┐рдХ - рддрдерд╛рдХрдерд┐рдд рдЫрджреНрдо-рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ (PRN)ред рдпрд╕ рдорд╛рдорд▓рд╛ рдорд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдПрдХ pseudorandom рдирдореНрдмрд░ рдЬрдирд░реЗрдЯрд░ (PRNG) рднрдирд┐рдиреНрдЫред

рддреНрдпрд╣рд╛рдБ PRNG рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдзреЗрд░реИ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рдЫрдиреН, рддрд░ рдирд┐рдореНрди рд╕рдмреИрдХрд╛ рд▓рд╛рдЧрд┐ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рд╣реБрдиреЗрдЫ:

  1. рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдкреНрд░рд╛рд░рдореНрднрд┐рдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХрддрд╛ред

    PRNG рд╕рдБрдЧ рдПрдиреНрдЯреНрд░реЛрдкреАрдХреЛ рдХреБрдиреИ рд╕реНрд░реЛрдд рдЫреИрди, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рджрд┐рдЗрдиреБрдкрд░реНрдЫред рдпрд╕рд▓рд╛рдИ рд╕рдВрдЦреНрдпрд╛ (рд╡рд╛ рднреЗрдХреНрдЯрд░) рдХреЛ рд░реВрдкрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдпрд╕рд▓рд╛рдИ рдмреАрдЬ (рдЕрдирд┐рдпрдорд┐рдд рдмреАрдЬ) рднрдирд┐рдиреНрдЫред рдкреНрд░рд╛рдпрдГ, рдкреНрд░реЛрд╕реЗрд╕рд░ рдШрдбреА рдХрд╛рдЙрдиреНрдЯрд░ рд╡рд╛ рдкреНрд░рдгрд╛рд▓реА рд╕рдордпрдХреЛ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдмрд░рд╛рдмрд░ рдмреАрдЬрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫред

  2. рдЕрдиреБрдХреНрд░рдо рдкреБрди: рдЙрддреНрдкрд╛рджрди рдХреНрд╖рдорддрд╛ред

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

рддрдкрд╛рдЗрдБрд▓реЗ PRNG рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реБрдиреЗ рд╕рдореНрднрд╛рд╡реНрдпрддрд╛ рд╡рд┐рддрд░рдг рдкрдирд┐ рдЬрд╛рдиреНрди рдЖрд╡рд╢реНрдпрдХ рдЫ - рдпрд╕рд▓реЗ рдХреБрди рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗрдЫ рд░ рдХреБрди рд╕рдореНрднрд╛рд╡рдирд╛рдХреЛ рд╕рд╛рдеред рдкреНрд░рд╛рдп: рдпреЛ рдпрд╛ рдд рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рддрд░рдг рд╡рд╛ рдПрдХ рд╕рдорд╛рди рд╡рд┐рддрд░рдг рд╣реЛред
BlessRNG рд╡рд╛ рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ RNG рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ
рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рддрд░рдг (рдмрд╛рдБрдпрд╛) рд░ рд╕рдорд╛рди рд╡рд┐рддрд░рдг (рджрд╛рдпрд╛рдБ)

рдорд╛рдиреМрдВ рд╣рд╛рдореАрд╕рдБрдЧ 24 рдкрдХреНрд╖рд╣рд░реВрд╕рдБрдЧ рдирд┐рд╖реНрдкрдХреНрд╖ рдореГрддреНрдпреБ рдЫред рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЯрд╕ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рдПрдХ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ 1/24 рдмрд░рд╛рдмрд░ рд╣реБрдиреЗрдЫ (рдЕрдиреНрдп рдирдореНрдмрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ рдЬрд╕реНрддреИ)ред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдзреЗрд░реИ рдереНрд░реЛрд╣рд░реВ рдмрдирд╛рдЙрдиреБрд╣реБрдиреНрдЫ рд░ рдирддрд┐рдЬрд╛рд╣рд░реВ рд░реЗрдХрд░реНрдб рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБрд▓реЗ рдпрд╛рдж рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫ рдХрд┐ рд╕рдмреИ рдХрд┐рдирд╛рд░рд╣рд░реВ рд▓рдЧрднрдЧ рдПрдЙрдЯреИ рдлреНрд░рд┐рдХреНрд╡реЗрдиреНрд╕реАрдХреЛ рд╕рд╛рде рдЭрд░реНрдЫрдиреНред рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдкрдорд╛, рдпреЛ рдорд░ рдПрдХ рд╕рдорд╛рди рд╡рд┐рддрд░рдг рд╕рдВрдЧ рдПрдХ RNG рдорд╛рдиреНрди рд╕рдХрд┐рдиреНрдЫред

рдпрджрд┐ рддрдкрд╛рдЗрдБ рдпреА рдкрд╛рд╕рд╛ рдордзреНрдпреЗ 10 рд╡рдЯрд╛ рдПрдХреИрдЪреЛрдЯрд┐ рдлрд╛рд▓реНрдиреБрднрдпреЛ рд░ рдХреБрд▓ рдЕрдВрдХрд╣рд░реВ рдЧрдгрдирд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рдХреЗ рд╣реБрдиреНрдЫ? рддреНрдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдПрдХрд░реВрдкрддрд╛ рдХрд╛рдпрдо рд╣реБрдиреЗ рд╣реЛ рдХрд┐ ? рдЫреИрдиред рдкреНрд░рд╛рдпрдГ, рд░рдХрдо 125 рдЕрдВрдХрдХреЛ рдирдЬрд┐рдХ рд╣реБрдиреЗрдЫ, рддреНрдпреЛ рд╣реЛ, рдХреЗрд╣рд┐ рдФрд╕рдд рдореВрд▓реНрдпрдорд╛ред рд░ рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рдПрдХ рдереНрд░реЛ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдкрдирд┐, рддрдкрд╛рдИрдВ рднрд╡рд┐рд╖реНрдпрдХреЛ рдкрд░рд┐рдгрд╛рдо рд▓рдЧрднрдЧ рдЕрдиреБрдорд╛рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдХрд╛рд░рдг рдпреЛ рд╣реЛ рдХрд┐ рддреНрдпрд╣рд╛рдБ рдФрд╕рдд рд╕реНрдХреЛрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдВрдпреЛрдЬрдирд╣рд░реВрдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рдареВрд▓реЛ рд╕рдВрдЦреНрдпрд╛ рд╣реЛред рдпрд╕рдмрд╛рдЯ рдЯрд╛рдврд╛, рдХрдо рд╕рдВрдпреЛрдЬрдирд╣рд░реВ - рд░, рддрджрдиреБрд╕рд╛рд░, рд╣рд╛рдирд┐рдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛ рдХрдоред рдпрджрд┐ рдпреЛ рдбреЗрдЯрд╛ рдХрд▓реНрдкрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ рднрдиреЗ, рдпреЛ рдЕрд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдШрдгреНрдЯреАрдХреЛ рдЖрдХрд╛рд░ рдЬрд╕реНрддреИ рд╣реБрдиреЗрдЫред рддреНрдпрд╕рдХрд╛рд░рдг, рдХреЗрд╣реА рд╕реНрдЯреНрд░реЗрдЪрдХреЛ рд╕рд╛рде, 10 рдкрд╛рд╕рд╛рд╣рд░реВрдХреЛ рдкреНрд░рдгрд╛рд▓реАрд▓рд╛рдИ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рддрд░рдгрдХреЛ рд╕рд╛рде RNG рднрдирд┐рдиреНрдЫред

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

рдЕрдм PNG рдЕрдиреБрдХреНрд░рдо рдХреЛ рдПрдиреНрдЯреНрд░реЛрдкреА рдХреЛ рдмрд╛рд░реЗ рдорд╛ рдХреБрд░рд╛ рдЧрд░реМрдВред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рддреНрдпрд╣рд╛рдБ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдЫ рдЬреБрди рдпреЛ рдЬрд╕реНрддреИ рд╕реБрд░реБ рд╣реБрдиреНрдЫ:

реореп, репрей, рейрей, рейреи, реореи, реирез, рек, рекреи, резрез, рео, ремреж, репрел, релрей, рейреж, рекреи, резреп, рейрек, рейрел, ремреи, реирей, рекрек, рейрео, ренрек, рейрем, релреи, резрео, релрео, ренреп, ремрел, рекрел, репреп, репреж, реореи, реиреж, рекрез, резрей, реорео, ренрем, реореи, реирек, рел, релрек, ренреи, резреп, реореж, реи, ренрек, рейрем, ренрез, реп, ...

рдкрд╣рд┐рд▓реЛ рдирдЬрд░рдорд╛ рдпреА рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ рдХрддрд┐ рдЕрдирд┐рдпрдорд┐рдд рдЫрдиреН? рд╡рд┐рддрд░рдг рдЬрд╛рдБрдЪ рдЧрд░реЗрд░ рд╕реБрд░реБ рдЧрд░реМрдВред
BlessRNG рд╡рд╛ рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ RNG рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ
рдпреЛ рдПрдХрд╕рдорд╛рдирдХреЛ рдирдЬрд┐рдХ рджреЗрдЦрд┐рдиреНрдЫ, рддрд░ рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рджреБрдИ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдо рдкрдвреНрдиреБрднрдпреЛ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╡рд┐рдорд╛рдирдорд╛ рд╕рдордиреНрд╡рдпрдХреЛ рд░реВрдкрдорд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдпреЛ рдкрд╛рдЙрдиреБрд╣реБрдиреЗрдЫ:
BlessRNG рд╡рд╛ рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ RNG рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ
рдврд╛рдБрдЪрд╛рд╣рд░реВ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рджреЗрдЦреНрди рд╕рдХрд┐рдиреНрдЫред рд░ рдЬрдм рд╕реЗ рдЕрдиреБрдХреНрд░рдо рдорд╛ рдбреЗрдЯрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддрд░рд┐рдХрд╛ рдорд╛ рдЕрд░реНрдбрд░ рдЧрд░рд┐рдПрдХреЛ рдЫ (рдЕрд░реНрдерд╛рдд, рдпреЛ рдХрдо рдПрдиреНрдЯреНрд░реЛрдкреА рдЫ), рдпрд╕рд▓реЗ рддреНрдпреЛ "рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣" рдХреЛ рдЬрдиреНрдо рджрд┐рди рд╕рдХреНрдЫред рдХрдореНрддрд┐рдорд╛, рдпрд╕реНрддреЛ PRNG рд╡рд┐рдорд╛рдирдорд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдзреЗрд░реИ рдЙрдкрдпреБрдХреНрдд рдЫреИрдиред

рдЕрд░реНрдХреЛ рдХреНрд░рдо:

реореп, репрей, рейрей, рейреи, реореи, реирез, рек, рекреи, резрез, рео, ремреж, репрел, релрей, рейреж, рекреи, резреп, рейрек, рейрел, ремреи, реирей, рекрек, рейрео, ренрек, рейрем, релреи, резрео, релрео, ренреп, ремрел, рекрел, репреп, репреж, реореи, реиреж, рекрез, резрей, реорео, ренрем, реореи, реирек, рел, релрек, ренреи, резреп, реореж, реи, ренрек, рейрем, ренрез, реп, ...

рдпрд╣рд╛рдБ рдкреНрд▓реЗрдирдорд╛ рдкрдирд┐ рд╕рдмреИ рдХреБрд░рд╛ рдареАрдХ рдЫ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
BlessRNG рд╡рд╛ рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ RNG рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ
рднреЛрд▓реНрдпреБрдордорд╛ рд╣реЗрд░реМрдВ (рдПрдХ рдкрдЯрдХрдорд╛ рддреАрди рдирдореНрдмрд░рд╣рд░реВ рдкрдвреНрдиреБрд╣реЛрд╕реН):
BlessRNG рд╡рд╛ рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ RNG рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ
рд░ рдлреЗрд░рд┐ рдврд╛рдБрдЪрд╛рд╣рд░реВред рдпреЛ рдЕрдм рдЪрд╛рд░ рдЖрдпрд╛рдорд╣рд░реВрдорд╛ рдПрдХ рджреГрд╢реНрдп рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫреИрдиред рддрд░ рдврд╛рдБрдЪрд╛рд╣рд░реВ рдпрд╕ рдЖрдпрд╛рдордорд╛ рд░ рдареВрд▓рд╛рд╣рд░реВрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрди рд╕рдХреНрдЫрдиреНред

рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреАрдорд╛, рдЬрд╣рд╛рдБ PRNGs рдорд╛ рд╕рдмреИрднрдиреНрджрд╛ рдХрдбрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рд▓рдЧрд╛рдЗрдиреНрдЫ, рдпрд╕реНрддреЛ рдЕрд╡рд╕реНрдерд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдЫред рддреНрдпрд╕рдХрд╛рд░рдг, рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЧреБрдгрд╕реНрддрд░ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рдЧрд░реНрди рд╡рд┐рд╢реЗрд╖ рдПрд▓реНрдЧреЛрд░рд┐рджрдорд╣рд░реВ рд╡рд┐рдХрд╕рд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЬрд╕рд▓рд╛рдИ рд╣рд╛рдореА рдЕрд╣рд┐рд▓реЗ рдЫреБрдиреЗ рдЫреИрдиреМрдВред рд╡рд┐рд╖рдп рд╡реНрдпрд╛рдкрдХ рдЫ рд░ рдЫреБрдЯреНрдЯреИ рд▓реЗрдЦрдХреЛ рдпреЛрдЧреНрдп рдЫред

рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрджреИ

рдпрджрд┐ рд╣рд╛рдореА рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдкрдорд╛ рдХреЗрд╣рд┐ рдерд╛рд╣рд╛ рдЫреИрди рднрдиреЗ, рддреНрдпрд╕реЛрднрдП рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдиреЗ? рдХреБрди рдЯреНрд░рд╛рдлрд┐рдХ рд▓рд╛рдЗрдЯрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ рдерд╛рд╣рд╛ рдЫреИрди рднрдиреЗ рдХреЗ рдпреЛ рд╕рдбрдХ рдкрд╛рд░ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫ? рдкрд░рд┐рдгрд╛рдо рдлрд░рдХ рд╣реБрди рд╕рдХреНрдЫред

рдПрдХрддрд╛рдорд╛ рдХреБрдЦреНрдпрд╛рдд рдЕрдирд┐рдпрдорд┐рддрддрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкрдирд┐ рдпрд╣реА рд╣реЛред рдпреЛ рд░рд╛рдореНрд░реЛ рдЫ рдпрджрд┐ рдХрд╛рдЧрдЬрд╛рддрд▓реЗ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдкреНрд░рдХрдЯ рдЧрд░реНрджрдЫ, рддрд░ рд▓реЗрдЦрдХреЛ рд╕реБрд░реБрдорд╛ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдПрдХреЛ рдХрдерд╛ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рд╡рд░рдгрд╣рд░реВрдХреЛ рдЕрднрд╛рд╡рдХреЛ рдХрд╛рд░рдгрд▓реЗ рдареАрдХ рднрдпреЛред

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

рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд░ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рдерд┐рдпреЛ - рддрдереНрдпрд╛рдЩреНрдХрд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд╡рд╕реНрддреБрдЧрдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред

рдЕрдзреНрдпрдпрдирдХреЛ рд╡рд┐рд╖рдп

Unity рдорд╛ рдЕрдирд┐рдпрдорд┐рдд рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗ рдзреЗрд░реИ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреН - рд╣рд╛рдореАрд▓реЗ рдкрд╛рдБрдЪ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрдпреМрдВред

  1. System.Random.Next()ред рдорд╛рдирд╣рд░реВрдХреЛ рджрд┐рдЗрдПрдХреЛ рджрд╛рдпрд░рд╛рдорд╛ рдкреВрд░реНрдгрд╛рдВрдХрд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫред
  2. System.Random.NextDouble()ред рджрд╛рдпрд░рд╛рдорд╛ рдбрдмрд▓ рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫ [0; рез)
  3. UnityEngine.Random.Range()ред рдорд╛рдирд╣рд░реВрдХреЛ рджрд┐рдЗрдПрдХреЛ рджрд╛рдпрд░рд╛рдорд╛ рдПрдХрд▓ рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ (рдлреНрд▓реЛрдЯреНрд╕) рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫред
  4. UnityEngine.Random.valueред [0; рдмрд╛рдЯ рджрд╛рдпрд░рд╛рдорд╛ рдПрдХрд▓ рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ (рдлреНрд▓реЛрдЯреНрд╕) рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫ; рез)
  5. Unity.Mathematics.Random.NextFloat()ред рдирдпрд╛рдБ Unity.Mathematics рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рднрд╛рдЧред рдорд╛рдирд╣рд░реВрдХреЛ рджрд┐рдЗрдПрдХреЛ рджрд╛рдпрд░рд╛рдорд╛ рдПрдХрд▓ рд╕рдЯреАрдХ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ (рдлреНрд▓реЛрдЯреНрд╕) рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫред

рдХрд╛рдЧрдЬрд╛рддрдорд╛ рд▓рдЧрднрдЧ рд╕рдмреИ рдард╛рдЙрдБрдорд╛ UnityEngine.Random.value (рдЬрд╣рд╛рдБ рд╡рд┐рддрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдПрди, рддрд░ UnityEngine.Random.Range() рд╡рд░реНрджреАрд╕рдБрдЧ рд╕рдорд╛рдирддрд╛ рдкрдирд┐ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд┐рдпреЛ) рд░ Unity.Mathematics.Random рдХреЛ рдЕрдкрд╡рд╛рдж рдмрд╛рд╣реЗрдХ, рдПрдХ рд╕рдорд╛рди рд╡рд┐рддрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛред .NextFloat() (рдЬрд╣рд╛рдБ рдЖрдзрд╛рд░рдорд╛ xorshift рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЫ, рдЬрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдлреЗрд░рд┐ рдПрдХ рд╕рдорд╛рди рд╡рд┐рддрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреБ рдкрд░реНрдЫ)ред

рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛, рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдХрд╛рдЧрдЬрд╛рддрдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдЗрдпреЛред

рд╡рд┐рдзрд┐рд╢рд╛рд╕реНрддреНрд░

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

рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд▓рдореНрдмрд╛рдЗ 100 рд╕рдВрдЦреНрдпрд╛ рдЫред
рдЕрдирд┐рдпрдорд┐рдд рд╕рдВрдЦреНрдпрд╛рд╣рд░реВрдХреЛ рджрд╛рдпрд░рд╛ [0, 100) рд╣реЛред

рдзреЗрд░реИ рд▓рдХреНрд╖рд┐рдд рдкреНрд▓реЗрдЯрдлрд░реНрдорд╣рд░реВрдмрд╛рдЯ рдбрд╛рдЯрд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ:

  • Windows
    тАФ Unity v2018.3.14f1, рд╕рдореНрдкрд╛рджрдХ рдореЛрдб, рдореЛрдиреЛ, .NET рдорд╛рдирдХ 2.0
  • MacOS
    тАФ Unity v2018.3.14f1, рд╕рдореНрдкрд╛рджрдХ рдореЛрдб, рдореЛрдиреЛ, .NET рдорд╛рдирдХ 2.0
    тАФ Unity v5.6.4p4, рд╕рдореНрдкрд╛рджрдХ рдореЛрдб, рдореЛрдиреЛ, .NET рдорд╛рдирдХ реи.реж
  • Android
    тАФ Unity v2018.3.14f1, рдмрд┐рд▓реНрдб рдкреНрд░рддрд┐ рдпрдиреНрддреНрд░, рдореЛрдиреЛ, .NET рдорд╛рдирдХ реи.реж
  • рдЖрдИрдУрдПрд╕
    тАФ Unity v2018.3.14f1, рдмрд┐рд▓реНрдб рдкреНрд░рддрд┐ рдпрдиреНрддреНрд░, il2cpp, .NET рдорд╛рдирдХ реи.реж

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╣рд╛рдореАрд╕рдБрдЧ рдЕрдирд┐рдпрдорд┐рдд рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреНред рддрд┐рдиреАрд╣рд░реВ рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХрдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдЫреБрдЯреНрдЯреИ рд░реНрдпрд╛рдкрд░ рд╡рд░реНрдЧ рд▓реЗрдЦреНрдиреЗрдЫреМрдВ, рдЬрд╕рд▓реЗ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреБрдкрд░реНрдЫ:

  1. рдорд╛рдирд╣рд░реВрдХреЛ рджрд╛рдпрд░рд╛ рд╕реЗрдЯ рдЧрд░реНрдиреЗ рд╕рдореНрднрд╛рд╡рдирд╛ [рдорд┐рдирдЯ/рдЕрдзрд┐рдХрддрдо)ред рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдорд╛рд░реНрдлрдд рд╕реЗрдЯ рдЧрд░рд┐рдиреЗрдЫред
  2. MF рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреЗ рд╡рд┐рдзрд┐ред рдкреНрд░рдХрд╛рд░рдХреЛ рд░реВрдкрдорд╛ рдлреНрд▓реЛрдЯ рдЫрдиреМрдЯ рдЧрд░реМрдВ, рдХрд┐рдирдХрд┐ рдпреЛ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдЫред
  3. рдкрд░рд┐рдгрд╛рдорд╣рд░реВ рдЪрд┐рдиреНрд╣ рд▓рдЧрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЙрддреНрдкрд╛рджрди рд╡рд┐рдзрд┐рдХреЛ рдирд╛рдоред рд╕реБрд╡рд┐рдзрд╛рдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдорд╛рдирдХреЛ рд░реВрдкрдорд╛ рд╡рд░реНрдЧрдХреЛ рдкреВрд░рд╛ рдирд╛рдо + MF рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ рд╡рд┐рдзрд┐рдХреЛ рдирд╛рдо рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреЗрдЫреМрдВред

рдкрд╣рд┐рд▓реЗ, IRandomGenerator рдЗрдиреНрдЯрд░рдлреЗрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░рд┐рдиреЗ рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рдШреЛрд╖рдгрд╛ рдЧрд░реМрдВ:

namespace RandomDistribution
{
    public interface IRandomGenerator
    {
        string Name { get; }

        float Generate();
    }
}

рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиредRandom.Next()

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

using System;

namespace RandomDistribution
{
    public class SystemIntegerRandomGenerator : IRandomGenerator
    {
        private const int DefaultFactor = 100000;
        
        private readonly Random _generator = new Random();
        private readonly int _min;
        private readonly int _max;
        private readonly int _factor;


        public string Name => "System.Random.Next()";


        public SystemIntegerRandomGenerator(float min, float max, int factor = DefaultFactor)
        {
            _min = (int)min * factor;
            _max = (int)max * factor;
            _factor = factor;
        }


        public float Generate() => (float)_generator.Next(_min, _max) / _factor;
    }
}

рдкреНрд░рдгрд╛рд▓реАрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиредRandom.NextDouble()

рдпрд╣рд╛рдБ рдорд╛рдирд╣рд░реВрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рджрд╛рдпрд░рд╛ [реж; рез) рдпрд╕рд▓рд╛рдИ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛрдорд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг рдЧрд░реНрди, рд╣рд╛рдореА рд╕рд╛рдзрд╛рд░рдг рдЕрдВрдХрдЧрдгрд┐рдд рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ: X * (рдЕрдзрд┐рдХрддрдо тИТ рдорд┐рдиреЗрдЯ) + рдорд┐рдиреЗрдЯред

using System;

namespace RandomDistribution
{
    public class SystemDoubleRandomGenerator : IRandomGenerator
    {
        private readonly Random _generator = new Random();
        private readonly double _factor;
        private readonly float _min;


        public string Name => "System.Random.NextDouble()";


        public SystemDoubleRandomGenerator(float min, float max)
        {
            _factor = max - min;
            _min = min;
        }


        public float Generate() => (float)(_generator.NextDouble() * _factor) + _min;
    }
}

UnityEngine.Random.Range() рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

UnityEngine.Random static class рдХреЛ рдпреЛ рд╡рд┐рдзрд┐рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдорд╛рдирд╣рд░реВрдХреЛ рджрд╛рдпрд░рд╛ рд╕реЗрдЯ рдЧрд░реНрди рд░ рдлреНрд▓реЛрдЯ рдкреНрд░рдХрд╛рд░ рдлрд░реНрдХрд╛рдЙрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рддрдкрд╛рдИрдВрд▓реЗ рдХреБрдиреИ рдкрдирд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫреИрдиред

using UnityEngine;

namespace RandomDistribution
{
    public class UnityRandomRangeGenerator : IRandomGenerator
    {
        private readonly float _min;
        private readonly float _max;


        public string Name => "UnityEngine.Random.Range()";


        public UnityRandomRangeGenerator(float min, float max)
        {
            _min = min;
            _max = max;
        }


        public float Generate() => Random.Range(_min, _max);
    }
}

UnityEngine.Random.value рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ UnityEngine рдХреЛ рдорд╛рди рдЧреБрдгред рдЕрдирд┐рдпрдорд┐рдд рдорд╛рдирд╣рд░реВрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рджрд╛рдпрд░рд╛рдмрд╛рдЯ рдлреНрд▓реЛрдЯ рдкреНрд░рдХрд╛рд░ рдлрд░реНрдХрд╛рдЙрдБрдЫ [0; рез) System.Random.NextDouble() рд▓рд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрджрд╛ рдЬрд╕реНрддреИ рдпрд╕рд▓рд╛рдИ рджрд┐рдЗрдПрдХреЛ рджрд╛рдпрд░рд╛рдорд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЧрд░реМрдВред

using UnityEngine;

namespace RandomDistribution
{
    public class UnityRandomValueGenerator : IRandomGenerator
    {
        private readonly float _factor;
        private readonly float _min;


        public string Name => "UnityEngine.Random.value";


        public UnityRandomValueGenerator(float min, float max)
        {
            _factor = max - min;
            _min = min;
        }


        public float Generate() => (float)(Random.value * _factor) + _min;
    }
}

Unity.Mathematics.Random.NextFloat() рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

Unity.Mathematics.Random рд╡рд░реНрдЧрдХреЛ NextFloat() рд╡рд┐рдзрд┐рд▓реЗ рдлреНрд▓реЛрдЯ рдкреНрд░рдХрд╛рд░рдХреЛ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдмрд┐рдиреНрджреБ рдлрд░реНрдХрд╛рдЙрдБрдЫ рд░ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдорд╛рдирд╣рд░реВрдХреЛ рджрд╛рдпрд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдПрдХрдорд╛рддреНрд░ рд╕реВрдХреНрд╖реНрдорддрд╛ рдпреЛ рд╣реЛ рдХрд┐ Unity.Mathematics.Random рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗрд╣рд┐ рдмреАрдЬ рд╕рдВрдЧ рдкреНрд░рд╛рд░рдореНрдн рдЧрд░рд┐рдиреЗрдЫ - рдпрд╕ рддрд░реАрдХрд╛рд▓реЗ рд╣рд╛рдореА рджреЛрд╣реЛрд░рд┐рдиреЗ рдХреНрд░рдорд╣рд░реВ рдЙрддреНрдкрдиреНрди рдЧрд░реНрдирдмрд╛рдЯ рдмрдЪреНрдиреЗрдЫреМрдВред

using Unity.Mathematics;

namespace RandomDistribution
{
    public class UnityMathematicsRandomValueGenerator : IRandomGenerator
    {
        private Random _generator;
        private readonly float _min;
        private readonly float _max;


        public string Name => "Unity.Mathematics.Random.NextFloat()";


        public UnityMathematicsRandomValueGenerator(float min, float max)
        {
            _min = min;
            _max = max;
            _generator = new Random();
            _generator.InitState(unchecked((uint)System.DateTime.Now.Ticks));
        }


        public float Generate() => _generator.NextFloat(_min, _max);
    }
}

рдореБрдЦреНрдп рдирд┐рдпрдиреНрддреНрд░рдХ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

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

рдбреЗрдЯрд╛рд╕реЗрдЯрдХреЛ рд╕рд╛рдЗрдЬ рд░ MF рдорд╛рдирд╣рд░реВрдХреЛ рджрд╛рдпрд░рд╛ рд╕реЗрдЯ рдЧрд░реМрдВ, рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рд░ рдХрд╛рдо рдЧрд░реНрди рддрдпрд╛рд░ рднрдПрдХреЛ рдЬрдирд░реЗрдЯрд░рд╣рд░реВрдХреЛ рдПрд░реНрд░реЗ рдлрд░реНрдХрд╛рдЙрдиреЗ рд╡рд┐рдзрд┐ рдкрдирд┐ рдкрд╛рдЙрдиреБрд╣реЛрд╕реНред

namespace RandomDistribution
{
    public class MainController : MonoBehaviour
    {
        private const int DefaultDatasetSize = 100000;

        public float MinValue = 0f;
        public float MaxValue = 100f;

        ...

        private IRandomGenerator[] CreateRandomGenerators()
        {
            return new IRandomGenerator[]
            {
                new SystemIntegerRandomGenerator(MinValue, MaxValue),
                new SystemDoubleRandomGenerator(MinValue, MaxValue),
                new UnityRandomRangeGenerator(MinValue, MaxValue),
                new UnityRandomValueGenerator(MinValue, MaxValue),
                new UnityMathematicsRandomValueGenerator(MinValue, MaxValue)
            };
        }

        ...
    }
}

рдЕрдм рдПрдХ рдбрд╛рдЯрд╛рд╕реЗрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдбреЗрдЯрд╛ рдЙрддреНрдкрд╛рджрдирд▓рд╛рдИ рдкрд╛рда рд╕реНрдЯреНрд░рд┐рдордорд╛ (csv рдврд╛рдБрдЪрд╛рдорд╛) рд░реЗрдХрд░реНрдбрд┐рдЩрд╕рдБрдЧ рдЬреЛрдбрд┐рдиреЗрдЫред рдкреНрд░рддреНрдпреЗрдХ IRandomGenerator рдХреЛ рдорд╛рдирд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди, рдпрд╕рдХреЛ рдЖрдлреНрдиреИ рдЫреБрдЯреНрдЯреИ рд╕реНрддрдореНрдн рдЖрд╡рдВрдЯрд┐рдд рдЧрд░рд┐рдПрдХреЛ рдЫ, рд░ рдкрд╣рд┐рд▓реЛ рд░реЗрдЦрд╛рдорд╛ рдЬрдирд░реЗрдЯрд░рдХреЛ рдирд╛рдо рд╕рдорд╛рд╡реЗрд╢ рдЫред

namespace RandomDistribution
{
    public class MainController : MonoBehaviour
    {
        ...
		
        private void GenerateCsvDataSet(TextWriter writer, int dataSetSize, params IRandomGenerator[] generators)
        {
            const char separator = ',';
            int lastIdx = generators.Length - 1;

            // write header
            for (int j = 0; j <= lastIdx; j++)
            {
                writer.Write(generators[j].Name);
                if (j != lastIdx)
                    writer.Write(separator);
            }
            writer.WriteLine();

            // write data
            for (int i = 0; i <= dataSetSize; i++)
            {
                for (int j = 0; j <= lastIdx; j++)
                {
                    writer.Write(generators[j].Generate());
                    if (j != lastIdx)
                        writer.Write(separator);
                }

                if (i != dataSetSize)
                    writer.WriteLine();
            }
        }

        ...
    }
}

рдЬреЗрдиреЗрд░реЗрдЯCsvDataSet рд╡рд┐рдзрд┐рд▓рд╛рдИ рдХрд▓ рдЧрд░реНрди рд░ рдирддрд┐рдЬрд╛рд▓рд╛рдИ рдлрд╛рдЗрд▓рдорд╛ рдмрдЪрдд рдЧрд░реНрди рд╡рд╛ рддреБрд░реБрдиреНрддреИ рдЕрдиреНрддрд┐рдо рдпрдиреНрддреНрд░рдмрд╛рдЯ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗ рд╕рд░реНрднрд░рдорд╛ рдбрд╛рдЯрд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди рдмрд╛рдБрдХреА рдЫред

namespace RandomDistribution
{
    public class MainController : MonoBehaviour
    {
        ...
		
        public void GenerateCsvDataSet(string path, int dataSetSize, params IRandomGenerator[] generators)
        {
            using (var writer = File.CreateText(path))
            {
                GenerateCsvDataSet(writer, dataSetSize, generators);
            }
        }


        public string GenerateCsvDataSet(int dataSetSize, params IRandomGenerator[] generators)
        {
            using (StringWriter writer = new StringWriter(CultureInfo.InvariantCulture))
            {
                GenerateCsvDataSet(writer, dataSetSize, generators);
                return writer.ToString();
            }
        }

        ...
    }
}

рдЖрдпреЛрдЬрдирд╛рдХрд╛ рд╢реНрд░реЛрддрд╣рд░реБ рд░рд╣реЗрдХрд╛ рдЫрдиреН GitLab.

╨а╨╡╨╖╤Г╨╗╤М╤В╨░╤В╤Л

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

рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдпрд╕реНрддреЛ рдЫ:
BlessRNG рд╡рд╛ рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ RNG рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ

рд╕рдмреИ рдкрд╛рдБрдЪ рдкреБрд╕реНрддрд╛ рд╡рд┐рдзрд┐рд╣рд░реВрдмрд╛рдЯ рд╡рд┐рдорд╛рдирдорд╛ рджреГрд╢реНрдпрд╣рд░реВрдХреЛ рджреГрд╢реНрдп:
BlessRNG рд╡рд╛ рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ RNG рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ

рд░ 3D рдорд╛ рджреГрд╢реНрдпред рдо System.Random.Next() рдХреЛ рдирддрд┐рдЬрд╛ рдорд╛рддреНрд░ рдЫреЛрдбреНрдиреЗрдЫреБ рддрд╛рдХрд┐ рд╕рдорд╛рди рд╕рд╛рдордЧреНрд░реАрдХреЛ рдЧреБрдЪреНрдЫрд╛ рдЙрддреНрдкрд╛рджрди рдирдЧрд░реНрдиреБрд╣реЛрд╕реНред
BlessRNG рд╡рд╛ рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛рдХреЛ рд▓рд╛рдЧрд┐ RNG рдЬрд╛рдБрдЪ рдЧрд░реНрджреИ

UnityEngine рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рддрд░рдгрдХреЛ рдмрд╛рд░реЗрдорд╛ рдкрд░рд┐рдЪрдпрдорд╛ рднрдирд┐рдПрдХреЛ рдХрдерд╛редRandom рд▓реЗ рдЖрдлреИрд▓рд╛рдИ рджреЛрд╣реЛрд░реНрдпрд╛рдПрдХреЛ рдЫреИрди: рдпрд╛ рдд рдпреЛ рд╕реБрд░реБрдорд╛ рдЧрд▓рдд рдерд┐рдпреЛ, рд╡рд╛ рдЗрдиреНрдЬрд┐рдирдорд╛ рдХреЗрд╣рд┐ рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рдЫред рддрд░ рдЕрдм рд╣рд╛рдореА рдвреБрдХреНрдХ рдЫреМрдВред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди