public static void CalculateKvittningar(this IEnumerable<PlayEvent> penalties, PlayersOnIce playersOnIce) { var penaltyList = penalties.ToList(); var homePenalties = penaltyList.Where(p => p.HomeTeam && !p.PenaltyIsMisconduct).ToList(); var awayPenalties = penaltyList.Where(p => !p.HomeTeam && !p.PenaltyIsMisconduct).ToList(); if (IsExceptionToRule(playersOnIce, homePenalties, awayPenalties)) return; foreach (var homePenalty in homePenalties) { var awayPenaltyThatShouldKvittas = awayPenalties.WithoutKvittningar().FirstOrDefault(p => p.StartTime == homePenalty.StartTime && p.PenaltyTime == homePenalty.PenaltyTime); if (awayPenaltyThatShouldKvittas == null) continue; homePenalty.IsKvittad = true; awayPenaltyThatShouldKvittas.IsKvittad = true; } //Handle extra minors if original penalty is kvittad they should get the original startime foreach (var penalty in penaltyList.WithoutKvittningar().Where(p => p.HasOriginalPenalty)) { penalty.HandleOriginalPenaltyIsKvittad(); } }
private void CalculatePlayersOnIce(int startTime) { var homePenalties = _penalties.WithoutKvittningar().Count(p => p.HomeTeam && !p.PenaltyIsMisconduct && !p.PenaltyIsGame && p.StartTime <= startTime && p.EndTime > startTime); var awayPenalties = _penalties.WithoutKvittningar().Count(p => !p.HomeTeam && !p.PenaltyIsMisconduct && !p.PenaltyIsGame && p.StartTime <= startTime && p.EndTime > startTime); _playersOnIce = PlayersOnIce.Unknown; if (homePenalties == 0 && awayPenalties == 0) { _playersOnIce = PlayersOnIce.FiveOnFive; } if (homePenalties == 0 && awayPenalties == 1) { _playersOnIce = PlayersOnIce.FiveOnFour; } if (homePenalties == 0 && awayPenalties >= 2) { _playersOnIce = PlayersOnIce.FiveOnThree; } if (homePenalties == 1 && awayPenalties >= 2) { _playersOnIce = PlayersOnIce.FourOnThree; } if (homePenalties == 1 && awayPenalties == 0) { _playersOnIce = PlayersOnIce.FourOnFive; } if (homePenalties >= 2 && awayPenalties == 0) { _playersOnIce = PlayersOnIce.ThreeOnFive; } if (homePenalties >= 2 && awayPenalties == 1) { _playersOnIce = PlayersOnIce.ThreeOnFour; } if (homePenalties == 1 && awayPenalties == 1) { _playersOnIce = PlayersOnIce.FourOnFour; } if (homePenalties >= 2 && awayPenalties >= 2) { _playersOnIce = PlayersOnIce.ThreeOnThree; } }
public static void CalculateKvittningar(this IEnumerable <PlayEvent> penalties, PlayersOnIce playersOnIce) { var penaltyList = penalties.ToList(); var homePenalties = penaltyList.Where(p => p.HomeTeam && !p.PenaltyIsMisconduct).ToList(); var awayPenalties = penaltyList.Where(p => !p.HomeTeam && !p.PenaltyIsMisconduct).ToList(); if (IsExceptionToRule(playersOnIce, homePenalties, awayPenalties)) { return; } foreach (var homePenalty in homePenalties) { var awayPenaltyThatShouldKvittas = awayPenalties.WithoutKvittningar().FirstOrDefault(p => p.StartTime == homePenalty.StartTime && p.PenaltyTime == homePenalty.PenaltyTime); if (awayPenaltyThatShouldKvittas == null) { continue; } homePenalty.IsKvittad = true; awayPenaltyThatShouldKvittas.IsKvittad = true; } //Handle extra minors if original penalty is kvittad they should get the original startime foreach (var penalty in penaltyList.WithoutKvittningar().Where(p => p.HasOriginalPenalty)) { penalty.HandleOriginalPenaltyIsKvittad(); } }
private static bool IsExceptionToRule(PlayersOnIce playersOnIce, IEnumerable <PlayEvent> homePenalties, IEnumerable <PlayEvent> awayPenalties) { return(playersOnIce == PlayersOnIce.FiveOnFive && homePenalties.Count(p => p.PenaltyIsMinor) == 1 && awayPenalties.Count(p => p.PenaltyIsMinor) == 1); }
private void CalculatePlayersOnIce(int startTime) { var homePenalties = _penalties.WithoutKvittningar().Count(p => p.HomeTeam && !p.PenaltyIsMisconduct && !p.PenaltyIsGame && p.StartTime <= startTime && p.EndTime > startTime); var awayPenalties = _penalties.WithoutKvittningar().Count(p => !p.HomeTeam && !p.PenaltyIsMisconduct && !p.PenaltyIsGame && p.StartTime <= startTime && p.EndTime > startTime); _playersOnIce = PlayersOnIce.Unknown; if (homePenalties == 0 && awayPenalties == 0) _playersOnIce = PlayersOnIce.FiveOnFive; if (homePenalties == 0 && awayPenalties == 1) _playersOnIce = PlayersOnIce.FiveOnFour; if (homePenalties == 0 && awayPenalties >= 2) _playersOnIce = PlayersOnIce.FiveOnThree; if (homePenalties == 1 && awayPenalties >= 2) _playersOnIce = PlayersOnIce.FourOnThree; if (homePenalties == 1 && awayPenalties == 0) _playersOnIce = PlayersOnIce.FourOnFive; if (homePenalties >= 2 && awayPenalties == 0) _playersOnIce = PlayersOnIce.ThreeOnFive; if (homePenalties >= 2 && awayPenalties == 1) _playersOnIce = PlayersOnIce.ThreeOnFour; if (homePenalties == 1 && awayPenalties == 1) _playersOnIce = PlayersOnIce.FourOnFour; if (homePenalties >= 2 && awayPenalties >= 2) _playersOnIce = PlayersOnIce.ThreeOnThree; }
private static bool IsExceptionToRule(PlayersOnIce playersOnIce, IEnumerable<PlayEvent> homePenalties, IEnumerable<PlayEvent> awayPenalties) { return playersOnIce == PlayersOnIce.FiveOnFive && homePenalties.Count(p => p.PenaltyIsMinor) == 1 && awayPenalties.Count(p => p.PenaltyIsMinor) == 1; }