using System.Collections.Generic;
public static Dictionary<string, int> Week9WinsByTeams = new()
public static Dictionary<string, Dictionary<int,int>> Week10RankByTeams = new()
public static void Main()
for (int i = 0; i < 500000; i++)
IterationSimulateWeek10(i+1);
var stringHeader = "Rank;";
for (int i = 16; i > 0; i--)
Console.WriteLine(stringHeader);
foreach (var team in Week10RankByTeams)
var stringTeam = $"{team.Key};";
for (int i = 16; i > 0; i--)
if(team.Value.TryGetValue(i, out var data))
stringTeam += data.ToString();
Console.WriteLine(stringTeam);
public static void PrepareW10Ranks()
foreach (var team in Week10RankByTeams)
for (int i = 16; i > 0; i--)
public static void IterationSimulateWeek10(int randomSeed)
Dictionary<string, int> dict = new(Week9WinsByTeams);
var random = new Random(randomSeed);
SimulateGame("Foxes", "Sabres", random, dict);
SimulateGame("Wolves", "Puffins", random, dict);
SimulateGame("Aviators", "Hawks", random, dict);
SimulateGame("Ducks", "Hive", random, dict);
SimulateGame("Express", "Knights", random, dict);
SimulateGame("Spartans", "Jets", random, dict);
SimulateGame("Blizzard", "Hurricanes", random, dict);
SimulateGame("Lightning", "Eclipse", random, dict);
GenerateRanking(dict, random);
public static void SimulateGame(string TeamA, string TeamB, Random random, Dictionary<string, int> dict)
for (int i = 0 ; i < 5; i++)
if (random.NextDouble() < teamAOdds)
dict[TeamB]+= (5-teamAWins);
public static void GenerateRanking(Dictionary<string, int> dict, Random random)
List<string> finalRanking = new();
var teamArctic = new List<string> { "Wolves", "Puffins", "Foxes", "Sabres" };
var teamSky = new List<string> { "Aviators", "Ducks", "Hawks", "Hive" };
var teamForge = new List<string> { "Express", "Jets", "Knights", "Spartans" };
var teamStorm = new List<string> { "Blizzard", "Eclipse", "Hurricanes", "Lightning" };
var randomWeight = dict.ToDictionary(key => key.Key, value => random.Next());
var orderedTeams = dict.OrderByDescending(i => i.Value).ThenByDescending(i => randomWeight[i.Key]).Select(i => i.Key).ToList();
Dictionary<string, int> champs = new();
var topArctic = orderedTeams.First(i => teamArctic.Contains(i));
champs.Add(topArctic, dict[topArctic]);
var topSky = orderedTeams.First(i => teamSky.Contains(i));
champs.Add(topSky, dict[topSky]);
var topForge = orderedTeams.First(i => teamForge.Contains(i));
champs.Add(topForge, dict[topForge]);
var topStorm = orderedTeams.First(i => teamStorm.Contains(i));
champs.Add(topStorm, dict[topStorm]);
finalRanking.AddRange(champs.OrderByDescending(i => i.Value).ThenByDescending(i => randomWeight[i.Key]).Select(i => i.Key).ToList());
var rest = orderedTeams.Except(finalRanking).ToList();
finalRanking.AddRange(rest);
for (int i = 0; i < 16; i++)
Week10RankByTeams[finalRanking[i]][i+1]++;