public static Corrida Create(int numeroVoltas, IList <LinhaLog> linhasLog) { var corrida = new Corrida(numeroVoltas); foreach (var linha in linhasLog) { var horaFinalVolta = TimeSpan.Parse(linha.Hora); var codigoPiloto = int.Parse(linha.CodigoPiloto); var nomePiloto = linha.NomePiloto; var numeroVolta = int.Parse(linha.NumeroVolta); var velocidadeMedia = double.Parse(linha.VelocidadeMedia); if (!TimeSpan.TryParseExact(linha.TempoVolta, @"m\:ss\.fff", CultureInfo.InvariantCulture, out TimeSpan tempoVolta)) { if (!TimeSpan.TryParseExact(linha.TempoVolta, @"mm\:ss\.fff", CultureInfo.InvariantCulture, out tempoVolta)) { if (!TimeSpan.TryParseExact(linha.TempoVolta, @"h\:mm\:ss\.fff", CultureInfo.InvariantCulture, out tempoVolta)) { throw new Exception("Uma volta maior que 9 horas não é possível"); } } } if (!corrida.Pilotos.TryGetValue(codigoPiloto, out Piloto piloto)) { piloto = new Piloto(codigoPiloto, nomePiloto); corrida.Pilotos.Add(codigoPiloto, piloto); } piloto.Voltas.Add(new Volta(numeroVolta, horaFinalVolta, tempoVolta, velocidadeMedia)); } return(corrida); }
public TimeSpan RetornarTempoAposVencedor(Piloto vencedor) { var tempoVencedor = vencedor.Voltas.OrderByDescending(x => x.HoraFinal).First().HoraFinal; var tempoPiloto = this.Voltas.OrderByDescending(x => x.HoraFinal).First().HoraFinal; return(tempoPiloto - tempoVencedor); }
public int VerificarPosicaoPiloto(Piloto piloto) { var pilotosUltimaVolta = this.Pilotos .Select(x => new { Codigo = x.Key, NumeroVoltas = x.Value.Voltas.Count, x.Value.Voltas.OrderByDescending(y => y.HoraFinal).First().HoraFinal }) .OrderByDescending(n => n.NumeroVoltas).OrderBy(v => v.HoraFinal).ToList(); var posicao = 0; foreach (var pl in pilotosUltimaVolta) { posicao++; if (pl.Codigo == piloto.Codigo) { break; } } return(posicao); }