I am having some trouble to achieve this little round robin project. What i try to do is to generate a preview calendar of games
then I want to output;
day 1: Team 1 vs Team 2; Team 3 vs Team 4; Team 5vs Team 6;
day 2 Team 1 vs Team 4; Team 6 vs Team 3; Team 2 vs Team 5;
till the end of the championship;
Here is the code i've got so far but i'm having trouble to let the first team fixed while the rest of the array rotates...:
static void Main(string[] args)
{
string[] ListTeam = new string[] {"Equipe1", "Equipe2", "Equipe3", "Equipe4", "Equipe5", "Equipe6"};
IList<Match> ListMatch = new List<Match>();
it NumberOfDays = (ListTeam.Count()-1);
int y = 2;
for (int i = 1; i <= NumberOfDays; i++)
{
Console.WriteLine("\nDay {0} : \n",i);
Console.WriteLine(ListTeam[0].ToString() + " VS " + ListTeam[i].ToString());
for (y =ListTeam.Count(); y>0 ; y--)
{
Console.WriteLine(ListTeam[y].ToString() + " VS " + ListTeam[y+1].ToString());
y++;
}
}
}
EDIT: I found a code sample in java but i cant translate it...
Round robin is a CPU scheduling algorithm that is designed especially for time sharing systems. It is more like a FCFS scheduling algorithm with one change that in Round Robin processes are bounded with a quantum time size. A small unit of time is known as Time Quantum or Time Slice.
Round Robin is a CPU scheduling algorithm where each process is assigned a fixed time slot in a cyclic way. It is basically the preemptive version of First come First Serve CPU Scheduling algorithm. Round Robin CPU Algorithm generally focuses on Time Sharing technique.
Based on the @paracycle's answer, I am providing a better code with the following changes:
T
teams
list innstancepublic static IEnumerable<(int Day, T First, T Second)> ListMatches<T>(IList<T> teams)
{
var matches = new List<(int, T, T)>();
if (teams == null || teams.Count < 2)
{
return matches;
}
var restTeams = new List<T>(teams.Skip(1));
var teamsCount = teams.Count;
if (teams.Count % 2 != 0)
{
restTeams.Add(default);
teamsCount++;
}
for (var day = 0; day < teamsCount - 1; day++)
{
if (restTeams[day % restTeams.Count]?.Equals(default) == false)
{
matches.Add((day, teams[0], restTeams[day % restTeams.Count]));
}
for (var index = 1; index < teamsCount / 2; index++)
{
var firstTeam = restTeams[(day + index) % restTeams.Count];
var secondTeam = restTeams[(day + restTeams.Count - index) % restTeams.Count];
if (firstTeam?.Equals(default) == false && secondTeam?.Equals(default) == false)
{
matches.Add((day, firstTeam, secondTeam));
}
}
}
return matches;
}
Code to test it:
foreach (var match in ListMatches(new List<string> { "T1", "T2", "T3", "T4", "T5", "T6" }))
{
Console.WriteLine($"{match.Day} => {match.First}-{match.Second}");
}
Output for 6 teams:
0 => T1-T2
0 => T3-T6
0 => T4-T5
1 => T1-T3
1 => T4-T2
1 => T5-T6
2 => T1-T4
2 => T5-T3
2 => T6-T2
3 => T1-T5
3 => T6-T4
3 => T2-T3
4 => T1-T6
4 => T2-T5
4 => T3-T4
Output for 5 teams:
0 => T1-T2
0 => T4-T5
1 => T1-T3
1 => T4-T2
2 => T1-T4
2 => T5-T3
3 => T1-T5
3 => T2-T3
4 => T2-T5
4 => T3-T4
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With