public static void Main()
Console.WriteLine("Hello World");
private static List<TournamentPlayer> ChoosePairs(IEnumerable<TournamentPlayer> players)
var matched = new List<TournamentPlayer>();
List<TournamentPlayer> ordered = players
.GroupBy((player) => player.TournamentPoints)
.OrderBy((grp) => grp.Key)
.Select((grp) => grp.Shuffle())
.SelectMany((grp) => grp).ToList();
if (tryMatchup(ordered, matched))
private static bool tryMatchup(List<TournamentPlayer> available, List<TournamentPlayer> matched)
if (available.Count == 0)
var player = available.First();
available.Remove(player);
var unmatched = available.Where(p => !player.Opponents.Contains(p)).ToList();
foreach (var player2 in unmatched)
var pos = available.IndexOf(player2);
available.Remove(player2);
if (tryMatchup(available, matched))
available.Insert(pos, player2);
available.Insert(0, player);