Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- namespace MundialGroupLogic
- {
- public abstract class AbstractCalculatePointsStrategy
- {
- public abstract int Calculate(int Wins, int Loses, int Draws);
- }
- public class CalculateFootbalPointsStrategy : AbstractCalculatePointsStrategy
- {
- public override int Calculate(int Wins, int Loses, int Draws)
- {
- return 3 * Wins + Draws;
- }
- }
- public class Team
- {
- public string Name { get; set; }
- }
- public class TeamInGroup
- {
- public Team Team { get; set; }
- public int Wins { get; set; } = 0;
- public int Loses { get; set; } = 0;
- public int Draws { get; set; } = 0;
- public int Scored { get; set; } = 0;
- public int Passed { get; set; } = 0;
- protected AbstractCalculatePointsStrategy CalculatePointsStrategy { get; set; }
- public TeamInGroup(AbstractCalculatePointsStrategy strategy)
- {
- CalculatePointsStrategy = strategy;
- }
- public int GetPoints()
- {
- return CalculatePointsStrategy.Calculate(Wins, Loses, Draws);
- }
- public void AddWin(int scored, int passed)
- {
- Wins += 1;
- Scored += scored;
- Passed += passed;
- }
- public void AddDraw(int scored, int passed)
- {
- Draws += 1;
- Scored += scored;
- Passed += passed;
- }
- public void AddLose(int scored, int passed)
- {
- Loses += 1;
- Scored += scored;
- Passed += passed;
- }
- }
- public class Group
- {
- public string Name { get; set; }
- protected List<TeamInGroup> Teams { get; set; }
- public Group()
- {
- Teams = new List<TeamInGroup>();
- }
- public void AddTeam(Team team)
- {
- var pointsStrategy = new CalculateFootbalPointsStrategy();
- Teams.Add(new TeamInGroup(pointsStrategy) { Team = team });
- }
- public List<TeamInGroup> GetTable()
- {
- return Teams.OrderByDescending(x => x.GetPoints())
- .ThenByDescending(x => x.Scored - x.Passed)
- .ThenByDescending(x => x.Scored)
- .ToList();
- }
- public void AddResult(Team home, Team away, int homeScore, int awayScore)
- {
- if (homeScore > awayScore)
- {
- Teams.Find(x => x.Team == home).AddWin(homeScore, awayScore);
- Teams.Find(x => x.Team == away).AddLose(awayScore, homeScore);
- }
- if (homeScore < awayScore)
- {
- Teams.Find(x => x.Team == home).AddLose(homeScore, awayScore);
- Teams.Find(x => x.Team == away).AddWin(awayScore, homeScore);
- }
- if (homeScore == awayScore)
- {
- Teams.Find(x => x.Team == home).AddDraw(homeScore, awayScore);
- Teams.Find(x => x.Team == away).AddDraw(awayScore, homeScore);
- }
- }
- }
- public class Program
- {
- public static void Main()
- {
- var teamA = new Team { Name = "Team A" };
- var teamB = new Team { Name = "Team B" };
- var teamC = new Team { Name = "Team C" };
- var teamD = new Team { Name = "Team D" };
- var gr = new Group { Name = "B1" };
- gr.AddTeam(teamA);
- gr.AddTeam(teamB);
- gr.AddTeam(teamC);
- gr.AddTeam(teamD);
- gr.AddResult(teamA, teamC, 1, 3);
- gr.AddResult(teamA, teamB, 1, 1);
- gr.AddResult(teamD, teamC, 2, 2);
- var table = gr.GetTable();
- Console.ReadKey();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement