public static Matchups[] GetAllMatchups(Match[] matches) { MatchupsAggregator aggregator = new MatchupsAggregator(matches); string[] teams = GetTeams(matches); foreach (string team in teams) { aggregator.ProcessTeam(team); } Matchups[] matchupsArray = aggregator.GetMatchups(); return matchupsArray; }
public static bool TryGetMatchups(Match[] matches, string team, out Matchups matchups) { IEnumerable<Match> matchesWithTeam = matches.Where(x => x.Team1.Item1 == team || x.Team2.Item1 == team); int matchesWithTeamCount = matchesWithTeam.Count(); if ((matchesWithTeamCount != 1) && (matchesWithTeamCount != MATCHES_ON_PAGE)) { matchups = null; return false; } IEnumerator<Match> matchesEnumerator = matchesWithTeam.GetEnumerator(); matchesEnumerator.MoveNext(); Match match1 = RearrangeMatch(matchesEnumerator.Current, team); double chance1 = CalcChance(match1.Team1.Item2, match1.Team2.Item2); if (matchesWithTeamCount == 1) { matchups = new Matchups( team, chance1, match1.Team2.Item1, chance1, String.Empty, Double.NaN); return true; } matchesEnumerator.MoveNext(); Match match2 = RearrangeMatch(matchesEnumerator.Current, team); double chance2 = CalcChance(match2.Team1.Item2, match2.Team2.Item2); matchups = new Matchups( team, chance1 + chance2, match1.Team2.Item1, chance1, match2.Team2.Item1, chance2); return true; }
private static string[] GetTeams(Match[] matches) { List<string> teams = new List<string>(); foreach(Match match in matches) { teams.Add(match.Team1.Item1); teams.Add(match.Team2.Item1); } IEnumerable<string> distinctTeams = teams.Distinct(); string[] teamsArray = distinctTeams.ToArray(); return teamsArray; }
// moves the specified team to be first in the match private static Match RearrangeMatch(Match match, string team) { if (match.Team1.Item1 == team) { return match; } else if (match.Team2.Item1 == team) { Tuple<string, double> odds1 = new Tuple<string, double>(match.Team2.Item1, match.Team2.Item2); Tuple<string, double> odds2 = new Tuple<string, double>(match.Team1.Item1, match.Team1.Item2); Match rearrangedMatch = new Match(match.Date, odds1, odds2); return rearrangedMatch; } else { string exception = String.Format("the team {0} was not found in the match", team); throw new Exception(exception); } }
public MatchupsAggregator(Match[] matches) { this.matches = matches; }
private void ProcessMatchRow(HtmlNode row) { IEnumerable<HtmlNode> cells = row.ChildNodes.Where(x => x.GetAttributeValue(ODDS_ATTRIBUTE) != String.Empty); int cellsCount = cells.Count(); if (cellsCount != TEAMS_IN_MATCH) { return; } IEnumerator<HtmlNode> cellsEnumerator = cells.GetEnumerator(); cellsEnumerator.MoveNext(); Tuple<string, double> odds1 = GetTeamOdds(cellsEnumerator.Current); cellsEnumerator.MoveNext(); Tuple<string, double> odds2 = GetTeamOdds(cellsEnumerator.Current); Match match = new Match(currentDate, odds1, odds2); matches.Add(match); }