fork download
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. public class Test
  6. {
  7. public static void Main()
  8. {
  9. var fixture = ComputeFixtures(new List<string> {"A", "B", "C", "D", "E", "F"});
  10.  
  11. fixture.ForEach(Console.WriteLine);
  12. }
  13.  
  14. public static List<Round> ComputeFixtures(List<string> listTeam)
  15. {
  16. var result = new List<Round>();
  17.  
  18. var numberOfRounds = (listTeam.Count - 1);
  19. var numberOfMatchesInARound = listTeam.Count / 2;
  20.  
  21. var teams = new List<string>();
  22.  
  23. teams.AddRange(listTeam.Skip(numberOfMatchesInARound).Take(numberOfMatchesInARound));
  24. teams.AddRange(listTeam.Skip(1).Take(numberOfMatchesInARound - 1).ToArray().Reverse());
  25.  
  26. var numberOfTeams = teams.Count;
  27.  
  28. for (var roundNumber = 0; roundNumber < numberOfRounds; roundNumber++)
  29. {
  30. var round = new Round();
  31. var teamIdx = roundNumber % numberOfTeams;
  32.  
  33. round.Matches.Add(new Match(teams[teamIdx], listTeam[0]));
  34.  
  35. for (var idx = 1; idx < numberOfMatchesInARound; idx++)
  36. {
  37. var firstTeamIndex = (roundNumber + idx) % numberOfTeams;
  38. var secondTeamIndex = (roundNumber + numberOfTeams - idx) % numberOfTeams;
  39.  
  40. round.Matches.Add(new Match(teams[firstTeamIndex], teams[secondTeamIndex]));
  41. }
  42.  
  43. result.Add(round);
  44. }
  45.  
  46. return result;
  47. }
  48. }
  49.  
  50. public class Match
  51. {
  52. public string Team1 { get; set; }
  53. public string Team2 { get; set; }
  54.  
  55. public Match(string team1, string team2)
  56. {
  57. Team1 = team1;
  58. Team2 = team2;
  59. }
  60.  
  61. public override string ToString()
  62. {
  63. return string.Format("{0} vs {1}", Team1, Team2);
  64. }
  65. }
  66.  
  67. public class Round
  68. {
  69. public List<Match> Matches { get; private set; }
  70.  
  71. public Round()
  72. {
  73. Matches = new List<Match>();
  74. }
  75.  
  76. public override string ToString()
  77. {
  78. return String.Join(Environment.NewLine,
  79. Matches.Select(m => m.ToString()).ToArray())
  80. + Environment.NewLine;
  81. }
  82. }
Success #stdin #stdout 0.04s 37000KB
stdin
Standard input is empty
stdout
D vs A
E vs B
F vs C

E vs A
F vs D
C vs B

F vs A
C vs E
B vs D

C vs A
B vs F
D vs E

B vs A
D vs C
E vs F