static void Main(string[] args) { string[] titulos = escolhasValidas.Select(x => "[" + x.ToString() + "]").ToArray(); Console.WriteLine("Problemas encontrados: " + titulos.Aggregate((current, next) => current + ", " + next)); Console.WriteLine("Digite [n] para não baixar títulos e estatísticas ou qualquer outra coisa para baixar:"); string baixar = Console.ReadLine(); if (baixar != "n" && baixar != "N") { Console.WriteLine("Tentando baixar lista de títulos e estatísticas da Internet...."); string html = baixaListaHtml(); if (html == "") { Console.WriteLine("Ops. Não foi possível baixar a lista."); } else { Console.WriteLine("Lista baixada. Lendo dados.."); titulos = pegaTitulosEestatisticas(html); } } // Pega input do usuário while (true) { Console.OutputEncoding = Encoding.Unicode; Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Selecione um dos problemas abaixo:"); foreach (string e in titulos) { Console.WriteLine("{0}", e); } string escolha = Console.ReadLine(); int iEscolha; if (int.TryParse(escolha, out iEscolha) && possuiSolucao(iEscolha)) { Console.ForegroundColor = ConsoleColor.DarkGreen; Console.WriteLine("Chamando função para problema {0}...", iEscolha); Console.WriteLine("‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾"); //Obtém dinamicamente uma instância do problema IProblem ip = CreateInstance <IProblem>(iEscolha); //Executa o problema string resposta = ip.Answer(); Console.WriteLine("_____________________________________"); Console.WriteLine("Resposta do problema: " + resposta); Console.WriteLine("‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾" + Environment.NewLine); Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Profiling do problema {0} com 20 iterações...", iEscolha); Console.WriteLine("‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾"); double tempoMedio = ip.Profile(); Console.WriteLine("_____________________________________"); Console.WriteLine("Tempo médio: {0} ms = {1} s", tempoMedio, tempoMedio / 1000); Console.WriteLine(Environment.NewLine); Console.ForegroundColor = ConsoleColor.Blue; } else { Console.WriteLine("Entrada inválida"); } } }