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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }