рдпрд╣ рдкреЛрд╕реНрдЯ рдбреА - рд╡реЛрд▓реНрдбреЗрдореЙрд░реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рдЕрдиреВрдареА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдЧреАред рдкреНрд░рдХрд╛рд░ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдирд╛рдо рдирд╣реАрдВред рдпрд╣ рдирд╛рдо рдЙрдирдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд▓реНрдЯрд░ рдмреНрд░рд╛рдЗрдЯ рдЙрдиреНрд╣реЗрдВ рдкреНрдпрд╛рд░ рд╕реЗ рдмреБрд▓рд╛рддреЗ рд╣реИрдВред Voldemort рдкреНрд░рдХрд╛рд░ рдорд╛рдирдХ рдлреЛрдмреЛрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдмрд╣реБрдд рдЖрдо рд╣реИрдВ, рдЦрд╛рд╕рдХрд░
std.al рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░
std.array рдореЙрдбреНрдпреВрд▓ рдореЗрдВ ред рдорд╛рд╕реНрдЯреНрд░рд┐рдВрдЧ рдбреА, рд╕реНрдкреНрд▓рд┐рдЯрд░ рдпрд╛ рдЬреЙрдЗрдирд░ рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдореЗрдВ рдШрдВрдЯреЛрдВ рдмрд┐рддрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╡реЛрд▓реНрдбреЗрдореЙрд░реНрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╡рд╛рдкрд╕реА рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдмрд╛рдж, рдЖрдк рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ std.algorithm рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА You-Know-Who рд╕реЗ рдбрд░реЗрдВрдЧреЗ рдирд╣реАрдВред

рдХрднреА-рдХрднреА, рдореМрдЬреВрджрд╛ рдХреНрд╖рдорддрд╛рдУрдВ рдХреА рдмрд╛рддрдЪреАрдд рд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЖрд╢реНрдЪрд░реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдореВрд▓ рд░реВрдк рд╕реЗ рдбреА рдореЗрдВ рд╡реЛрд▓реНрдбреЗрдореЙрд░реНрдЯ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реЗ рдЖрдВрджреНрд░реЗрдИ рдЕрд▓реЗрдХреНрдЬреЗрдВрдбреНрд░реЗрд╕реНрдХреБ рджреНрд╡рд╛рд░рд╛ рдкрд╛рдП рдЧрдП рдереЗред рдпреЗ Voldermort рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИрдВ? рдкрд░ рдкрдврд╝реЗрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреБрдЫ рдкреГрд╖реНрдарднреВрдорд┐ рдХреА рдЬрд╛рдирдХрд╛рд░реАред рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
рд░реЗрдВрдЬ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдореЗрдВ, рд╡реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдП рдЧрдП рдереЗ рдФрд░ рдЗрд╕рдХреЗ IEnumerable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде C # рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдбреА рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдкреНрд░рдХрд╛рд░ рдПрдХ рдЗрдирдкреБрдЯрд░реЗрдВрдЬ рд╣реЛрдЧрд╛:
front - get the first element of the range popFront - remove the first element of the range empty - are there more elements in the range?
рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░рдХрд╛рд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рдЕрдм рдХреЗрд╡рд▓ рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ InputRange рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВ рдЬреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЕрдирдВрдд рдЕрдиреБрдХреНрд░рдо рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛ред (рд╣рдо рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬрдирд░реЗрдЯрд░ рднреА рдХрд╣рддреЗ рд╣реИрдВред)
рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ (рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд▓реНрдж рд╣реА рд╣реЛрдЧрд╛):
module rnd; struct RandomNumberGenerator { this(uint seed) { next = seed; popFront();
рдФрд░ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛:
RandomNumberGenerator generator(uint seed) { return RandomNumberGenerator(seed); }
рдФрд░ рдПрдХ рдорд╣рд╛рди рдХрд╛рд░реНрдпрдХреНрд░рдо рдЬреЛ рдЗрди рдирдВрдмрд░реЛрдВ рдореЗрдВ рд╕реЗ 10 рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдЧрд╛:
import std.stdio; import rnd; void main() { int count; foreach (n; generator(5)) { writeln(n); if (++count == 10) break; } }
рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕рднреА рд╣реИ рдФрд░ рдмрдВрдж рдХрд░реЛред рд▓реЗрдХрд┐рди рдХреБрдЫ рдХрд╖реНрдЯрдкреНрд░рдж рдмрд┐рдВрджреБ рд╣реИрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдХреЗрд╡рд▓ rnd.generator рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ randomNumberGenerator рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬреЛ рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдПрдиреНрдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдЙрд▓реНрд▓рдВрдШрди рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рдЬрдирд░реЗрдЯрд░ рдЕрдореВрд░реНрдд рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдирд┐рдЬреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдФрд░ рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рд░реИрдВрдб рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдХрд╛рд░ рдЕрднреА рднреА рдпрд╣рд╛рдВ рд╣реИ, рдЬрд┐рд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИ, рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдиреНрдп рд╕рджрд╕реНрдп рдЕрднреА рднреА рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд▓реЙрдХ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдбреА рдкреНрд░рд╛рдЗрд╡реЗрдЯ рдореЗрдВ, рд╡рд┐рдЬреНрдЮрд╛рдкрди рдЙрд╕реА рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдЕрдиреНрдп рдШреЛрд╖рдгрд╛рдУрдВ рд╕реЗ рдЫрд┐рдкреЗ рдирд╣реАрдВ рд╣реИрдВ)ред
рдЪрд▓рд┐рдП рдФрд░ рднреА рдордЬрд╝реЗрджрд╛рд░ рдмрд╛рддреЛрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбреА рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдЕрдиреБрдорд╛рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ:
auto g = RandomNumberGenerator(seed);
рдФрд░ g рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ RandomNumberGenerator рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдПрдХ рдорд╛рдирдХ рдЪреАрдЬ рд╣реИред рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрд╛рдП рдЧрдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдШрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
auto square(double d) { return d * d; } auto x = square(2.3);
рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рд╕реНрдХреНрд╡рд╛рдпрд░ рдлрд╝рдВрдХреНрд╢рди рджреЛрдЧреБрдирд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рдкрд╕реА рдХреЗ рдмрд╛рдж рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИред рдФрд░ рд╣рд╛рдВ, рд╡реЗрд░рд┐рдПрдмрд▓ x рднреА рдЯрд╛рдЗрдк рдбрдмрд▓ рд╣реЛрдЧрд╛ред рдЕрдм рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
module rnd; auto generator(uint seed) { struct RandomNumberGenerator { @property int front() { return ((seed / 0x10000) * seed) >> 16; } void popFront() { seed = seed * 1103515245 + 12345; } @property bool empty() { return false; } } RandomNumberGenerator g; g.popFront();
рдХреБрдЫ рдордирдореЛрд╣рдХ рд╣реБрдЖред RandomNumberGenerator рдПрдХ рдкреНрд░рдХрд╛рд░ рдмрди рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЬрдирд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рдЕрдВрджрд░ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕реЗ рдирд╛рдо рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рд╡реЛрд▓реНрдбреЗрдореЙрд░реНрдЯ рдкреНрд░рдХрд╛рд░ рд╣реИред
рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
auto g = generator(5);
рдФрд░ рдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ - рдЯрд╛рдЗрдкреЛрдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рд░реИрдВрдбрдо рдирдореНрдмрд░рдЧреИрдиреЗрд░ рдХрд╛ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдВ:
auto g = generator(4); typeof(g) h;
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрдкрдиреЗ рджрд╛рдпрд░реЗ рдХреЗ рдмрд╛рд╣рд░ рд╡реЛрд▓реНрдбрдореЙрд░реНрдЯ рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ (рддрдХрдиреАрдХреА рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдиреАрдп рдмреАрдЬ рдЪрд░ рддрдХ рдХреЛрдИ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ)ред
рдЕрдм рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рд╡рд░рдг рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЙрджреНрдШреЛрд╖ рдХрд░рддрд╛ рд╣реИ, рдЪрдХреНрд░:
int count; foreach (n; generator(5)) { writeln(n); if (++count == 10) break; }
рд╡рд╣ рдЗрддрдиреЗ рдмреВрдврд╝реЗ рджрд┐рдЦрддреЗ рд╣реИрдВред рд╕реАрдорд╛рдУрдВ рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдХ рдореЛрдЯреА рд▓реВрдк рдХреЗ рдмрд┐рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рд╢реНрд░реЗрдгреА рдХреЗ рдкрд╣рд▓реЗ 10 рддрддреНрд╡реЛрдВ рдХреЛ
рд▓реЗрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд░реЗрдВрдЬ рд░реЗрдВрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
void main() { foreach (n; take(generator(5), 10)) writeln(n); }
рдФрд░ рдлрд┐рд░
рд▓реВрдк рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП
рд░рд┐рдЯреЗрд▓рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
void main() { writeln(take(generator(5), 10)); }
рдХреНрдпрд╛ рд╡реЛрд▓реНрдбреЗрдореЙрд░реНрдЯ рдкреНрд░рдХрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдЕрд╕реНрддрд┐рддреНрд╡рдЧрдд рдкреНрд░рдХрд╛рд░ рд╣реИрдВ?
рдЯрд╛рдЗрдк T рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ U рдЯрд╛рдЗрдк рдХрд░реЗрдВ, рдЬрд┐рд╕реЗ T рд╕реЗ рдирд┐рдХрд╛рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрд┐рд╕рдореЗрдВ T рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдмрдВрдз рд╣реЛрддрд╛ рд╣реИ, рдПрдХ рдЕрд╕реНрддрд┐рддреНрд╡рдЧрдд рдкреНрд░рдХрд╛рд░ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЯрд╛рдЗрдк T рд╣реИ, рдЬреЛ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдореВрд▓ рдЕрд╕реНрддрд┐рддреНрд╡ рдкреНрд░рдХрд╛рд░ U рд╕реЗ рдШрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
import std.stdio; void extractU(T)(T t) { static if (is(TU : U*)) writefln("type %s is a pointer to an %s", typeid(T), typeid(U)); else writefln("type %s is not a pointer", typeid(T)); } void main() { int* t; extractU(t); double d; extractU(d); }
рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛:
type int* is a pointer to an int type double is not a pointer
рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЛрд▓реНрдбреЗрдореЙрд░реНрдЯ рдкреНрд░рдХрд╛рд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫрд┐рдкрд╛рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЙрдиреНрд╣реЗрдВ рдЕрд╕реНрддрд┐рддреНрд╡рдЧрдд рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╡реЛрд▓реНрдбреЗрдореЙрд░реНрдЯ рдкреНрд░рдХрд╛рд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╡реЗ рдЕрд╕реНрддрд┐рддреНрд╡рдЧрдд рдирд╣реАрдВ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
рд╡реЛрд▓реНрдбреЗрдореЙрд░реНрдЯ рдкреНрд░рдХрд╛рд░ рдбреА рдореЗрдВ рдПрдХ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдЦреЛрдЬ рдмрди рдЧрдпрд╛, рдЬрд┐рд╕рдиреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреА рдЕрдиреБрдорддрд┐ рджреА рддрд╛рдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдмреБрд▓рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред
рд╕реНрд░реЛрдд: рд╡рд╛рд▓реНрдЯрд░ рд╣рд╛рдЗрдЯ
рд╡реЛрд▓реНрдбреЗрдореЙрд░реНрдЯ рдкреНрд░рдХрд╛рд░ рдбреА рдореЗрдВ