internal string GetGameChangersTable()
        {
            if (!Matchups.Any(x => string.IsNullOrEmpty(x.Winner))) return string.Empty;

            Console.Write("Building Game Changers");

            gameChangers = new List<GameChangerLine>();
            StringBuilder buf = new StringBuilder();
            buf.AppendLine("WIN PERCENTAGES BASED ON SINGLE GAME OUTCOMES");
            buf.AppendLine("ENTRY NAME          " + string.Join("|", Matchups.Where(x => String.IsNullOrEmpty(x.Winner))
                                                              .Select(x => string.Format("{0}   {1} ", x.Away.PadLeft(5), x.Home.PadLeft(4))).ToArray()));
            buf.AppendLine(new string('-', 20 + 14*Matchups.Count(x => String.IsNullOrEmpty(x.Winner))));

            foreach (Matchup m in Matchups.Where(x => String.IsNullOrEmpty(x.Winner)))
            {
                Console.Write('.');
                m.Winner = m.Away;
                m.Recalc();
                BuildWeekPossibilities();
                CalculateOutcomes();
                foreach (PlayerEntry e in PlayerEntries)
                {
                    GameChangerLine line = gameChangers.FirstOrDefault(x => x.EntryName == e.Name);
                    if (line == null)
                    {
                        line = new GameChangerLine(e.Name);
                        gameChangers.Add(line);
                    }
                    line.Winners[m.Winner] = 100*GetOverallWinProbability(line.EntryName);
                }

                m.Winner = m.Home;
                m.Recalc();
                BuildWeekPossibilities();
                CalculateOutcomes();
                foreach (PlayerEntry e in PlayerEntries)
                {
                    GameChangerLine line = gameChangers.FirstOrDefault(x => x.EntryName == e.Name);
                    if (line == null)
                    {
                        line = new GameChangerLine(e.Name);
                        gameChangers.Add(line);
                    }
                    line.Winners[m.Winner] = 100*GetOverallWinProbability(line.EntryName);
                }

                m.Winner = String.Empty;
                m.Recalc();
            }

            foreach (GameChangerLine line in gameChangers.OrderBy(x => x.EntryName))
            {
                buf.Append(line.EntryName.PadRight(20));
                foreach (Matchup mm in Matchups.Where(x => String.IsNullOrEmpty(x.Winner)))
                {
                    buf.Append(Math.Round(line.Winners[mm.Away], 2).ToString("0.00").PadLeft(6) + ' ' + Math.Round(line.Winners[mm.Home], 2).ToString("0.00").PadLeft(6) + '|');
                }
                buf.Remove(buf.Length - 1, 1);
                buf.AppendLine();
            }

            BuildWeekPossibilities();
            CalculateOutcomes();
            Console.WriteLine("done.");
            return buf.ToString();
        }
        internal string GetGameChangersTable()
        {
            if (!Matchups.Any(x => string.IsNullOrEmpty(x.Winner)))
            {
                return(string.Empty);
            }

            Console.Write("Building Game Changers");

            gameChangers = new List <GameChangerLine>();
            StringBuilder buf = new StringBuilder();

            buf.AppendLine("WIN PERCENTAGES BASED ON SINGLE GAME OUTCOMES");
            buf.AppendLine("ENTRY NAME          " + string.Join("|", Matchups.Where(x => String.IsNullOrEmpty(x.Winner))
                                                                .Select(x => string.Format("{0}   {1} ", x.Away.PadLeft(5), x.Home.PadLeft(4))).ToArray()));
            buf.AppendLine(new string('-', 20 + 14 * Matchups.Count(x => String.IsNullOrEmpty(x.Winner))));

            foreach (Matchup m in Matchups.Where(x => String.IsNullOrEmpty(x.Winner)))
            {
                Console.Write('.');
                m.Winner = m.Away;
                m.Recalc();
                BuildWeekPossibilities();
                CalculateOutcomes();
                foreach (PlayerEntry e in PlayerEntries)
                {
                    GameChangerLine line = gameChangers.FirstOrDefault(x => x.EntryName == e.Name);
                    if (line == null)
                    {
                        line = new GameChangerLine(e.Name);
                        gameChangers.Add(line);
                    }
                    line.Winners[m.Winner] = 100 * GetOverallWinProbability(line.EntryName);
                }

                m.Winner = m.Home;
                m.Recalc();
                BuildWeekPossibilities();
                CalculateOutcomes();
                foreach (PlayerEntry e in PlayerEntries)
                {
                    GameChangerLine line = gameChangers.FirstOrDefault(x => x.EntryName == e.Name);
                    if (line == null)
                    {
                        line = new GameChangerLine(e.Name);
                        gameChangers.Add(line);
                    }
                    line.Winners[m.Winner] = 100 * GetOverallWinProbability(line.EntryName);
                }

                m.Winner = String.Empty;
                m.Recalc();
            }

            foreach (GameChangerLine line in gameChangers.OrderBy(x => x.EntryName))
            {
                buf.Append(line.EntryName.PadRight(20));
                foreach (Matchup mm in Matchups.Where(x => String.IsNullOrEmpty(x.Winner)))
                {
                    buf.Append(Math.Round(line.Winners[mm.Away], 2).ToString("0.00").PadLeft(6) + ' ' + Math.Round(line.Winners[mm.Home], 2).ToString("0.00").PadLeft(6) + '|');
                }
                buf.Remove(buf.Length - 1, 1);
                buf.AppendLine();
            }

            BuildWeekPossibilities();
            CalculateOutcomes();
            Console.WriteLine("done.");
            return(buf.ToString());
        }