Advertisement
Guest User

Untitled

a guest
Jun 20th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.88 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. namespace MundialGroupLogic
  6. {
  7.     public abstract class AbstractCalculatePointsStrategy
  8.     {
  9.         public abstract int Calculate(int Wins, int Loses, int Draws);
  10.     }
  11.  
  12.     public class CalculateFootbalPointsStrategy : AbstractCalculatePointsStrategy
  13.     {
  14.         public override int Calculate(int Wins, int Loses, int Draws)
  15.         {
  16.             return 3 * Wins + Draws;
  17.         }
  18.     }
  19.  
  20.     public class Team
  21.     {
  22.         public string Name { get; set; }
  23.     }
  24.  
  25.     public class TeamInGroup
  26.     {
  27.         public Team Team { get; set; }
  28.  
  29.         public int Wins { get; set; } = 0;
  30.         public int Loses { get; set; } = 0;
  31.         public int Draws { get; set; } = 0;
  32.  
  33.         public int Scored { get; set; } = 0;
  34.         public int Passed { get; set; } = 0;
  35.  
  36.         protected AbstractCalculatePointsStrategy CalculatePointsStrategy { get; set; }
  37.  
  38.         public TeamInGroup(AbstractCalculatePointsStrategy strategy)
  39.         {
  40.             CalculatePointsStrategy = strategy;
  41.         }
  42.  
  43.         public int GetPoints()
  44.         {
  45.             return CalculatePointsStrategy.Calculate(Wins, Loses, Draws);
  46.         }
  47.  
  48.         public void AddWin(int scored, int passed)
  49.         {
  50.             Wins += 1;
  51.             Scored += scored;
  52.             Passed += passed;
  53.         }
  54.  
  55.         public void AddDraw(int scored, int passed)
  56.         {
  57.             Draws += 1;
  58.             Scored += scored;
  59.             Passed += passed;
  60.         }
  61.  
  62.         public void AddLose(int scored, int passed)
  63.         {
  64.             Loses += 1;
  65.             Scored += scored;
  66.             Passed += passed;
  67.         }
  68.     }
  69.  
  70.     public class Group
  71.     {
  72.         public string Name { get; set; }
  73.  
  74.         protected List<TeamInGroup> Teams { get; set; }
  75.  
  76.         public Group()
  77.         {
  78.             Teams = new List<TeamInGroup>();
  79.         }
  80.  
  81.         public void AddTeam(Team team)
  82.         {
  83.             var pointsStrategy = new CalculateFootbalPointsStrategy();
  84.             Teams.Add(new TeamInGroup(pointsStrategy) { Team = team });
  85.         }
  86.  
  87.         public List<TeamInGroup> GetTable()
  88.         {
  89.             return Teams.OrderByDescending(x => x.GetPoints())
  90.                 .ThenByDescending(x => x.Scored - x.Passed)
  91.                 .ThenByDescending(x => x.Scored)
  92.                 .ToList();
  93.         }
  94.  
  95.         public void AddResult(Team home, Team away, int homeScore, int awayScore)
  96.         {
  97.             if (homeScore > awayScore)
  98.             {
  99.                 Teams.Find(x => x.Team == home).AddWin(homeScore, awayScore);
  100.                 Teams.Find(x => x.Team == away).AddLose(awayScore, homeScore);
  101.             }
  102.  
  103.             if (homeScore < awayScore)
  104.             {
  105.                 Teams.Find(x => x.Team == home).AddLose(homeScore, awayScore);
  106.                 Teams.Find(x => x.Team == away).AddWin(awayScore, homeScore);
  107.             }
  108.  
  109.             if (homeScore == awayScore)
  110.             {
  111.                 Teams.Find(x => x.Team == home).AddDraw(homeScore, awayScore);
  112.                 Teams.Find(x => x.Team == away).AddDraw(awayScore, homeScore);
  113.             }
  114.         }
  115.     }
  116.  
  117.     public class Program
  118.     {
  119.         public static void Main()
  120.         {
  121.             var teamA = new Team { Name = "Team A" };
  122.             var teamB = new Team { Name = "Team B" };
  123.             var teamC = new Team { Name = "Team C" };
  124.             var teamD = new Team { Name = "Team D" };
  125.  
  126.             var gr = new Group { Name = "B1" };
  127.  
  128.             gr.AddTeam(teamA);
  129.             gr.AddTeam(teamB);
  130.             gr.AddTeam(teamC);
  131.             gr.AddTeam(teamD);
  132.  
  133.             gr.AddResult(teamA, teamC, 1, 3);
  134.             gr.AddResult(teamA, teamB, 1, 1);
  135.             gr.AddResult(teamD, teamC, 2, 2);
  136.  
  137.             var table = gr.GetTable();
  138.  
  139.             Console.ReadKey();
  140.         }
  141.     }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement