Пример #1
0
        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");
                }
            }
        }