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 static void GerarResultado(Corrida corrida, string file) { using (var sr = new StreamWriter(file)) { var posicaoChegadaHeader = "Posição Chegada "; var codigoPilotoHeader = "Código Piloto "; var nomePilotoHeader = "Nome Piloto "; var qtdVoltasHeader = "Qtde Voltas Completadas "; var tempoTotalHeader = "Tempo Total de Prova"; sr.WriteLine(string.Concat(posicaoChegadaHeader, codigoPilotoHeader, nomePilotoHeader, qtdVoltasHeader, tempoTotalHeader)); foreach (var piloto in corrida.Pilotos) { string linha = string.Empty; var posicao = corrida.VerificarPosicaoPiloto(piloto.Value).ToString(); linha += posicao + new string(' ', posicaoChegadaHeader.Length - posicao.Length); linha += piloto.Value.Codigo.ToString("000") + new string(' ', codigoPilotoHeader.Length - piloto.Value.Codigo.ToString("000").Length); linha += piloto.Value.Nome + new string(' ', nomePilotoHeader.Length - piloto.Value.Nome.Length); linha += piloto.Value.Voltas.Count + new string(' ', qtdVoltasHeader.Length - piloto.Value.Voltas.Count.ToString().Length); var tempoTotal = piloto.Value.CalcularTempoTotalProva().ToString(); linha += tempoTotal + new string(' ', tempoTotalHeader.Length - tempoTotal.Length); sr.WriteLine(linha); } } }