Round-robin tournament schedule: Difference between revisions
Content added Content deleted
m (→{{header|Wren}}: Changed to Wren S/H) |
(Add C# implementation) |
||
Line 585: | Line 585: | ||
Round 4: ( 1 vs 3 ) ( 5 vs 2 ) ( 6 vs 0 ) |
Round 4: ( 1 vs 3 ) ( 5 vs 2 ) ( 6 vs 0 ) |
||
Round 5: ( 1 vs 2 ) ( 4 vs 0 ) ( 5 vs 6 ) |
Round 5: ( 1 vs 2 ) ( 4 vs 0 ) ( 5 vs 6 ) |
||
</pre> |
|||
=={{header|C#}}== |
|||
{{trans|Java}} |
|||
<syntaxhighlight lang="C#"> |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
public class RoundRobinTournamentSchedule |
|||
{ |
|||
public static void Main(string[] args) |
|||
{ |
|||
Console.WriteLine("Round robin for 12 players:"); |
|||
RoundRobin(12); |
|||
Console.WriteLine("\n"); |
|||
Console.WriteLine("Round robin for 5 players, 0 denotes a bye:"); |
|||
RoundRobin(5); |
|||
} |
|||
private static void RoundRobin(int teamCount) |
|||
{ |
|||
if (teamCount < 2) |
|||
{ |
|||
throw new ArgumentException($"Number of teams must be greater than 2: {teamCount}"); |
|||
} |
|||
List<int> rotatingList = Enumerable.Range(2, teamCount - 1).ToList(); |
|||
if (teamCount % 2 == 1) |
|||
{ |
|||
rotatingList.Add(0); |
|||
teamCount += 1; |
|||
} |
|||
for (int round = 1; round < teamCount; round++) |
|||
{ |
|||
Console.Write($"Round {round,2}:"); |
|||
List<int> fixedList = new List<int> { 1 }; |
|||
fixedList.AddRange(rotatingList); |
|||
for (int i = 0; i < teamCount / 2; i++) |
|||
{ |
|||
Console.Write($" ( {fixedList[i],2} vs {fixedList[teamCount - 1 - i],2} )"); |
|||
} |
|||
Console.WriteLine(); |
|||
Rotate(rotatingList, 1); |
|||
} |
|||
} |
|||
private static void Rotate(List<int> list, int rotationCount) |
|||
{ |
|||
int count = list.Count; |
|||
if (count == 0) return; |
|||
rotationCount %= count; |
|||
if (rotationCount < 0) |
|||
{ |
|||
rotationCount += count; |
|||
} |
|||
list.Reverse(); |
|||
list.Reverse(0, rotationCount); |
|||
list.Reverse(rotationCount, count - rotationCount); |
|||
} |
|||
} |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
Round robin for 12 players: |
|||
Round 1: ( 1 vs 12 ) ( 2 vs 11 ) ( 3 vs 10 ) ( 4 vs 9 ) ( 5 vs 8 ) ( 6 vs 7 ) |
|||
Round 2: ( 1 vs 11 ) ( 12 vs 10 ) ( 2 vs 9 ) ( 3 vs 8 ) ( 4 vs 7 ) ( 5 vs 6 ) |
|||
Round 3: ( 1 vs 10 ) ( 11 vs 9 ) ( 12 vs 8 ) ( 2 vs 7 ) ( 3 vs 6 ) ( 4 vs 5 ) |
|||
Round 4: ( 1 vs 9 ) ( 10 vs 8 ) ( 11 vs 7 ) ( 12 vs 6 ) ( 2 vs 5 ) ( 3 vs 4 ) |
|||
Round 5: ( 1 vs 8 ) ( 9 vs 7 ) ( 10 vs 6 ) ( 11 vs 5 ) ( 12 vs 4 ) ( 2 vs 3 ) |
|||
Round 6: ( 1 vs 7 ) ( 8 vs 6 ) ( 9 vs 5 ) ( 10 vs 4 ) ( 11 vs 3 ) ( 12 vs 2 ) |
|||
Round 7: ( 1 vs 6 ) ( 7 vs 5 ) ( 8 vs 4 ) ( 9 vs 3 ) ( 10 vs 2 ) ( 11 vs 12 ) |
|||
Round 8: ( 1 vs 5 ) ( 6 vs 4 ) ( 7 vs 3 ) ( 8 vs 2 ) ( 9 vs 12 ) ( 10 vs 11 ) |
|||
Round 9: ( 1 vs 4 ) ( 5 vs 3 ) ( 6 vs 2 ) ( 7 vs 12 ) ( 8 vs 11 ) ( 9 vs 10 ) |
|||
Round 10: ( 1 vs 3 ) ( 4 vs 2 ) ( 5 vs 12 ) ( 6 vs 11 ) ( 7 vs 10 ) ( 8 vs 9 ) |
|||
Round 11: ( 1 vs 2 ) ( 3 vs 12 ) ( 4 vs 11 ) ( 5 vs 10 ) ( 6 vs 9 ) ( 7 vs 8 ) |
|||
Round robin for 5 players, 0 denotes a bye: |
|||
Round 1: ( 1 vs 0 ) ( 2 vs 5 ) ( 3 vs 4 ) |
|||
Round 2: ( 1 vs 5 ) ( 0 vs 4 ) ( 2 vs 3 ) |
|||
Round 3: ( 1 vs 4 ) ( 5 vs 3 ) ( 0 vs 2 ) |
|||
Round 4: ( 1 vs 3 ) ( 4 vs 2 ) ( 5 vs 0 ) |
|||
Round 5: ( 1 vs 2 ) ( 3 vs 0 ) ( 4 vs 5 ) |
|||
</pre> |
</pre> |
||