рдХреЛрдб рд╡рд╛рдкрд╕реА рдпрд╛ рдЕрдкрдиреЗ рд╕реБрд╡рд┐рдзрд╛ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдХрджрдо

рдирдорд╕реНрддреЗ!

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

рдХреЛрдб рд░рд┐рдЯреНрд░реАрдЯ - рдпрд╣ рдХреНрдпрд╛ рд╣реИ?


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХреЛрдб рд░рд┐рдЯреНрд░реАрдЯ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдпрд╣ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдореАрдЯрд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рддреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреЛ рд╕рд░рд▓ рдирд┐рдпрдореЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВ:

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

рдПрдХ рдкреНрд░рддреНрдпрдХреНрд╖рджрд░реНрд╢реА рдХреА рдирдЬрд░ рд╕реЗред рд╡рд╣ рдХреИрд╕рд╛ рдерд╛?


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

Iteration 1

рдкреНрд░рддрд┐рдмрдВрдз:
  1. рд╕рдордп рд╕реАрдорд╛ 45 рдорд┐рдирдЯ рд╣реИред
  2. рдЖрдкрдХреЛ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рд╣реЛрдиреЗ, рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдмрд╣реБрдордд рдХреЗ рд▓рд┐рдП, рдЖрд╡рдВрдЯрд┐рдд рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ, рдПрдХ рд╕рдорд╛рдзрд╛рди рддреИрдпрд╛рд░ рдерд╛ рдФрд░ рдЗрд╕рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рдлрд┐рд░ рдХреБрдХреАрдЬ, рдЬреБрдЧрд▓рд┐рдВрдЧ (!) рдФрд░ рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд╕рд╛рде 10 рдорд┐рдирдЯ рдХрд╛ рдХреЙрдлреА рдмреНрд░реЗрдХ рдерд╛! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЛрдбрд╝реЗ рдХрд╛ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрдиред

Iteration 2

рдкреНрд░рддрд┐рдмрдВрдз:
  1. 45 рдорд┐рдирдЯ
  2. TDD рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
    • рдкреНрд░рддреНрдпреЗрдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг
    • рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
      • рдкрд╣рд▓реЗ рд▓рд╛рд▓
      • рдЬрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реЛ рд╕рдХреЗ
      • рдЬрд┐рддрдирд╛ рд╕рд░рд▓ рд╣реЛ рд╕рдХреЗ
  3. рдХреАрдмреЛрд░реНрдб рдкрд░, рдкреНрд░рддреНрдпреЗрдХ 5 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдПред

рд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдХреБрдХреАрдЬрд╝ рдЦрд╛рдиреЗ рдХреЗ рд╕рд╛рде рдорд╛рдирдХ рдСрдкрд░реЗрд╢рди рдХреЗ рдЕрдВрдд рдореЗрдВ =) рдФрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЬреЛрдбрд╝реЗ рдмрджрд▓реЗрдВ!

Iteration 3 (рдкрд╣рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк)

рдкреНрд░рддрд┐рдмрдВрдз:
  1. 45 рдорд┐рдирдЯ
  2. рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рд╕реАрдорд╛рдПрдВ - 3 рд╕реЗ рдЕрдзрд┐рдХ (!) рд░реЗрдЦрд╛рдПрдВ рдирд╣реАрдВред
  3. рдХреАрдмреЛрд░реНрдб рдкрд░, рдкреНрд░рддреНрдпреЗрдХ 5 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдПред
  4. рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди рдЕрдВрддрд╣реАрди рд╣реИред

рдЗрд╕ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдордЬрд╝реЗрджрд╛рд░ рд╣реЛ рдЧрдпрд╛! рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо, рдЪреМрдерд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЖрдЧреЗ рд▓реВрдо! рдФрд░ рдкрд╣рд▓реЗ, рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛, рдХреЛрдб рдХреЛ рд╣рдЯрд╛рдирд╛ рдФрд░ рдЬреЛрдбрд╝реЗ рдХреЛ рдмрджрд▓рдирд╛!

Iteration 4 (рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк)

рдкреНрд░рддрд┐рдмрдВрдз:
  1. 45 рдорд┐рдирдЯ
  2. рдХреАрдмреЛрд░реНрдб рдкрд░, рдкреНрд░рддреНрдпреЗрдХ 5 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдПред
  3. рд╕реЗ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП:
    • рдорд╛рдЙрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ
    • 3 рдорд┐рдирдЯ рдХреА рдпреЛрдЬрдирд╛ рд╕рдордп-рд╕реАрдорд╛ (рдкреВрд░реЗ рд╕рддреНрд░ рдореЗрдВ рддреАрди рдорд┐рдирдЯ рдХреЗ рдЪрдХреНрд░ рд╣реЛрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдЪрдХреНрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рднрд╛рдЧреАрджрд╛рд░ рдЗрд╕ рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рд╕рдордп рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░ рд╕рд╣рдордд рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐, рд╢реБрд░реБрдЖрдд рдХреЗ 3 рдорд┐рдирдЯ рдмрд╛рдж, рд▓рдХреНрд╖реНрдп рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЪрдХреНрд░ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗ рдЧрдП рд╕рднреА рдХреЛрдб рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЪрдХреНрд░ рд╣реЛрддрд╛ рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ)
  4. рд╕реЗ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП:
    • рдХреЛрдИ рд╕рд╛рдЗрдХрд┐рд▓ рдирд╣реАрдВред
    • рдХреЛрдИ рд╕рд╢рд░реНрдд рдмрдпрд╛рди рдирд╣реАрдВред
    • рдХреЛрдИ рдЪрд░ рдирд╣реАрдВ рд╣реИрдВред

рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ, рдмрд╣реБрдордд рдХрд╛ рдЕрдВрддрд┐рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ 45 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЪрд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рд░ рдХреЛрдИ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдФрд░ рдХреЛрдИ рднреА рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╣рд╛рд░ рдирд╣реАрдВ рдорд╛рдирдирд╛ тАЛтАЛрдЪрд╛рд╣рддрд╛ рдерд╛ =)

рдЫрд╛рдкреЛрдВ


рджреЛ рд╢рдмреНрдж: рдпрд╣ рдХреБрдЫ рд╣реИ! рдХрдИ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рдХреНрдпрд╛ рд╣реБрдЖ, рдЗрд╕рдХреА рд╕рднреА рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╕реНрдерд┐рддрд┐ рдЗрд╕ рддрдереНрдп рд╕реЗ рдмрдврд╝ рдЧрдИ рдереА рдХрд┐ рд╣рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдЕрдЧрд▓реА рдмрд╛рд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкрд╣рд▓реА рдпрд╛рддреНрд░рд╛ рдореЗрдВ рд╣рдордиреЗ рдХрд▓реНрдкрдирд╛ рднреА рдирд╣реАрдВ рдХреА рдереА рдХрд┐ рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рд╕рдм рдХреБрдЫ рдкрд╕рдВрдж рдЖрдпрд╛! рдЗрдВрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХреА рдЧрдИ рд╕рдореАрдХреНрд╖рд╛рдПрдБ рдХреЗрд╡рд▓ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИрдВред рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЬрд┐рд╕ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рднреА рдХреБрдЫ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред

рд╕рдордЭ


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

рдкрд░рд┐рдгрд╛рдо


рдХреНрд░реИрд╢ рдХреЛрд░реНрд╕ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдореИрдВрдиреЗ рдХрдИ рдордиреЛрд░рдВрдЬрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдВрдЯреВрд░ рдореЗрдВ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдкреВрд░реЗ рдЬреЛрд░реЛрдВ рдкрд░ рд╣реИ! рд╕рднреА рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ!

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! =) рдФрд░ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ, рдЖрдк рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдЫрд╛рдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Denxc рдФрд░ Sleipnir рдХреЗ рдиреАрдЪреЗ рдХреЛрдб рд▓реЗрдЦрдХ
рдЕрдВрддрд┐рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╕реЗ рдЬреАрд╡рди рдЧреЗрдо рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ред
/* : 1.  . 2.  . 3.   . 4.      3- . 5.    Game   60 . */ class Game { private HashSet<Point> aliveCells; private IEnumerable<Point> movingVectors = new List<Point>() { new Point(-1, -1), new Point(-1, 0), new Point(-1, 1), new Point(0, -1), new Point(0, 1), new Point(1, -1), new Point(1, 0), new Point(1, 1) }; public Game(IEnumerable<Point> initCells) { aliveCells = new HashSet<Point>(initCells); } public Game MakeStep() { return new Game(aliveCells.SelectMany(Neighbours).Where(ShouldAlive)); } public void Show() { Console.Clear(); aliveCells.Where(c => cX >= 0 && cY >= 0 && cX < Console.WindowWidth && cY < Console.WindowHeight) .Select(PrintPoint).ToArray(); } public bool PrintPoint(Point cell) { Console.SetCursorPosition(cell.X, cell.Y); Console.Write('*'); return true; } public IEnumerable<Point> Neighbours(Point cell) { return movingVectors.Select(c => new Point(cX + cell.X, cY + cell.Y)); } public bool ShouldAlive(Point cell) { var aliveNeighboursCount = Neighbours(cell).Count(aliveCells.Contains); return aliveNeighboursCount == 3 || aliveNeighboursCount == 2 && aliveCells.Contains(cell); } } //     : public static void Run(Game game) { game.Show(); Thread.Sleep(40); Run(game.MakeStep()); } Run(new Game(new HashSet<Point>() { new Point(21, 23), new Point(21,21), new Point(21,22), new Point(22, 21), new Point(20, 22) } ) ); 


рдЖрдк рд╕реНрд░реЛрдд, рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣рд╛рдВ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред

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


All Articles