рдПрдХрд╛рдзрд┐рдХ рд╢рд╛рдЦрд╛рдПрдБ рдФрд░ рдирд┐рдпрдо рдЯреЗрдореНрдкрд▓реЗрдЯ

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




рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рд░

рдмрд╣реБрдд рдмрд╛рд░, рдЬрдЯрд┐рд▓ рддрд░реНрдХ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдиреЗрд╕реНрдЯреЗрдб рдЗрдлреНрд╕ рдХрд╛ рдПрдХ рдкреЗрдбрд╝ рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
рднрдпрд╛рдирдХ рдХреЛрдб
public double CalculateSomething(Condition condition) { //   if(condition.First...) ... //   if(condition.Second...) ... //    if(condition.AnotherFirst...) { //      if(condition.First) ... else... } //    if(condition.AnotherSecond...) { //      if(condition.Second) ... else... } //    if(condition.YetAnotherFirst) { //... if(condition.AnotherFirst && condition.Second) ... else { ... } } // O_o } 


рдХреНрдпрд╛ рд╡рд╣ рдкрд░рд┐рдЪрд┐рдд рд╣реИ? рддреЛ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ?

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

рд╕рдорд╕реНрдпрд╛ 2: рдирдпрд╛ рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ред рд╕рдордп рдХреЗ рд╕рд╛рде рдФрд░ рдирдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдЬреБрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдирдП рддрд░реНрдХ рдХрд╣рд╛рдБ рдФрд░ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдБред

рд╕рдорд╕реНрдпрд╛ 3: рдХреЛрдб рджреЛрд╣рд░рд╛рд╡ред рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдкреЗрдбрд╝ рд╢рд╛рдЦрд╛ рд╣реИ, рддреЛ рдХрднреА-рдХрднреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рд╣реА рдХреЛрдб рдХрдИ рд╢рд╛рдЦрд╛рдУрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрддрд╛ рд╣реИред

рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ "рдирд┐рдпрдо" рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИред рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
Uml рдЖрд░реЗрдЦ рд╕рдВрд░рдЪрдирд╛


рдпрд╣рд╛рдВ, рдЗрд╡реИрд▓реНрдпреВрдПрдЯрд░ рд╡рд░реНрдЧ рдореЗрдВ рдЖрдИрдЖрд░рдпреВрдПрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╣реИред рдореВрд▓реНрдпрд╛рдВрдХрдирдХрд░реНрддрд╛ рдирд┐рдпрдореЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ, C # рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдкрд╛рд╕рд╛ рдЦреЗрд▓ (рдЬреИрд╕реЗ "рддрд╛рд▓реА")

рдЦреЗрд▓ рдирд┐рдпрдо:

рдЦрд┐рд▓рд╛рдбрд╝реА рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ 5 рдкрд╛рд╕рд╛ рд░реЛрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рдЕрдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдпреЛрдЬрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
1 XXXX - 100 рдЕрдВрдХ
5 XXXX - 50 рдЕрдВрдХ
1 1 1 XX - 1000 рдЕрдВрдХ
2 2 2 XX - 200 рдЕрдВрдХ
3 3 3 XX - 300 рдЕрдВрдХ
4 4 4 XX - 400 рдЕрдВрдХ
5 5 5 XX - 500 рдЕрдВрдХ
6 6 6 XX - 600 рдЕрдВрдХ

рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг:
[1,1,1,5,1] - 1150 рдЕрдВрдХ
[2,3,4,6,2] - 0 рдЕрдВрдХ
[3,4,5,3,3] - 350 рдЕрдВрдХ

рдмреЗрд╢рдХ, рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрдИ рдФрд░ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫред

рдПрдХ рдмрд╛рд░ рдХрд░реЛ! рдХреЛрдИ рдкреИрдЯрд░реНрди рдирд╣реАрдВред

рдЖрдЗрдП, "рдирд┐рдпрдо" рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдП рдмрд┐рдирд╛ рдЦреЗрд▓ рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рд╣рдо 8 рд╡реАрдВ рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рд╕реВрдЪрдирд╛рддреНрдордХ рдкрд╛рда рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдмреБрд░реЗ рдХреЛрдб рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд┐рдП рдмрд┐рдирд╛ - рдЬрд┐рдирдХреА рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ!)
рдмреБрд░рд╛, рджреБрд╖реНрдЯ рдЦреЗрд▓ рдХрдХреНрд╖рд╛
 public class Game { public int Score(int[] roles) { int score = 0; for(int i=1; i<7; i++) { int count = CountDiceWithValue(roles, i); count = ScoreSetOfN(count, GetSetSize(i), SetSetScore(i), ref score); score += count * GetSingleDieScore(i); } return score } private int GetSingleDieScore(int val) { if(val==1) return 100; if(val==5) return 50; return 0; } private int GetSetScore(int val) { if(val==1) return 1000; return val*100; } private int GetSetSize(int val) { return 3; } private int ScoreSetOfN(int count, int setSize, int setScore, ref int score) { if(count>=setSize) { score += setScore; return count - 3; } return count; } private int CountDiceWithValue(int[] roles, int val) { int count = 0; foreach (int r in roles) { if (r == val) count++; } return count; } } 


рджреЛ рджреЛ! рдирд┐рдпрдо рдЬреЛрдбрд╝рдирд╛? рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгред

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

1 1 1 1 X - 2000
1 1 1 1 1 - 4000
1 2 3 4 5 - 8000
2 3 4 5 6 - 8000
AABBX - 4000
рдФрд░ рдЗрд╕реА рддрд░рд╣ред

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

рддреАрди рдХрд░реЛ! "рдирд┐рдпрдо" рдЯреЗрдореНрдкрд▓реЗрдЯ рд▓рд╛рдЧреВ рдХрд░реЗрдВ

1. Eval рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде IRule рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ, рдЬреЛ рдкрд╛рд╕рд╛ рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
IRule.cs
 public interface IRule { ScoreResult Eval(int[] dice); } 


2. рдПрдХ рд╡рд░реНрдЧ RuleSet рдмрдирд╛рдПрдВ, рдЬреЛ рдирд┐рдпрдореЛрдВ рдХреЗ рд╕реЗрдЯ, рдПрдХ рдирд┐рдпрдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ, рдФрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд┐рдпрдо рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдЬреЛ рдХреНрдпреВрдмреНрд╕ рдХреЗ рдЗрд╕ рд╕реЗрдЯ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
RuleSet.cs
 public class RuleSet { //  private List<IRule> _rules = new List<IRule>(); //  public void Add(IRule rule) { _rules.Add(rule); } //   - ,      public IRule BestRule(int[] dice) { ScoreResult bestResult = new ScoreResult(); foreach(var rule in _rules) { var result = rule.Eval(dice); if(result.Score > bestResult.Score) { bestResult = result; } return bestResult.RuleUsed; } } } 


3. рдмреЗрд╢рдХ, рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ
ScoreResult.cs
 public class ScoreResult { //   public int Score {get;set;} //    (       ) public int[] DiceUsed {get;set;} //   ,  ,     (  BestRule) public IRule RuleUsed {get;set;} } 


4. рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред
ConcreteRules.cs
 //    public class SingleDieRule : IRule { private readonly int _value; private readonly int _score; public SingleDieRule(int dieValue, int score) { _dieValue = dieValue, _score = score } //   -      public ScoreResult Eval(int[] dice) { //- var result = new ScoreResult(); //    (   ) -    result.DiceUsed = dice.Where(d=>d == dieValue).ToArray(); //   result.Score = result.DiceUsed.Count() * _score; //  -       result.RuleUsed = this; return result; } } //      


5. рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЛрдЬрдирд╛ рд╕реЗ Evaluator рд╡рд░реНрдЧ Game рд╡рд░реНрдЧ рд╣реЛрдЧрд╛, рдЗрд╕рдореЗрдВ рдирд┐рдпрдореЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рддрд░реНрдХ рдФрд░ рд╕реНрдХреЛрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛
Game.cs - рдореВрд▓реНрдпрд╛рдВрдХрдирдХрд░реНрддрд╛
 public class Game { private readonly RuleSet _ruleSet = new RuleSet(); public Game(bool useAllRules) { //  _ruleSet.Add(new SingleDieRule(1,100)); _ruleSet.Add(new SingleDieRule(5,50)); _ruleSet.Add(new TripleDieRule(1,1000)); for(int i=2; i<7; i++) { _ruleSet.Add(new TripleDieRule(i, i*100)); } //  if(useAllRules) { _ruleSet.Add(new FourOfADieRule(1,2000)); _ruleSet.Add(new SetOfADieRule(5,1,4000)); _ruleSet.Add(new StraightRule(8000)); _ruleSet.Add(new TwoPairsRule(6000)); for(int i=2; i<7; i++) { _ruleSet.Add(new FourOfADieRule(i,i*200)); _ruleSet.Add(new SetOfADieRule(i,i*400)); //... } } } //       public void AddScoringRule(IRule rule) { _ruleSet.Add(rule); } //  public int Score(int[] dice) { int score = 0; var remainingDice = new List<int>(dice); var bestRule = _ruleSet.BestRule(remainingDice.ToArray()); //             while(bestRule!=null) { var result = bestRule.Eval(remainingDice.ToArray()); foreach(var die in result.DiceUsed) { remainingDice.Remove(die); } score+=result.Score; bestRule = _ruleSet.BestRule(remainingDice.ToArray()); } return score; } } 


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

рдЖрдкрдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

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

рдмрд┐рдЬрдиреЗрд╕ рд░реВрд▓реНрд╕ рдЗрдВрдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж

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

рд╕рд╛рд░рд╛рдВрд╢

1) рд╣рдо "рдирд┐рдпрдо" рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╢рд░реНрддреЛрдВ рдФрд░ рд╢рд╛рдЦрд╛рдУрдВ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ
2) рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдФрд░ рдЙрд╕рдХреЗ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рддрд░реНрдХ рд░рдЦреЛ
3) рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рдирд┐рдпрдореЛрдВ рдХреЗ рдЪрдпрди рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ - рдореВрд▓реНрдпрд╛рдВрдХрдирдХрд░реНрддрд╛
4) рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ "рдЗрдВрдЬрди" рд╕рдорд╛рдзрд╛рди рд╣реИрдВ

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

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


All Articles