Example #1
0
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("Digite uma palavra para verificar seus anagramas");
                var expressao = Console.ReadLine();
                expressao = GeradorAnagrama.pegaLetras(expressao);

                if (!GeradorAnagrama.ValidarLetras(expressao))
                {
                    break;
                }

                var result = GeradorAnagrama.GerarAnagramas(expressao);

                // Console.WriteLine(result.Count());
                MostrarAnagramas(result);

                Console.WriteLine("\n\nDeseja sair? digite S/N");
                var sair = Console.ReadLine();

                if (sair.ToUpper() == "S")
                {
                    Console.Clear();
                    break;
                }
                else
                {
                    Console.Clear();
                }
            }

            Console.WriteLine("\n\nPressione qualquer tecla para finalizar a aplicação!!!");
            Console.ReadKey();
        }
Example #2
0
        public static List <string> GerarAnagramas(string expressao)
        {
            try
            {
                string        expressaoTemp   = null;
                string        expressaoVal    = null;
                List <string> palavrasValidas = new List <string>();

                string[] dicionario = File.ReadAllLines("Palavras.txt");

                //Percorre as dicionario da lista
                for (int i = 0; i < dicionario.Length; i++)
                {
                    List <string> possiveisAnagramas = new List <string>();
                    expressaoTemp = expressao;

                    //Verifica se a palavra é um possível GeradorAnagrama para a expressão
                    if (GeradorAnagrama.validarAnagrama(expressaoTemp, dicionario[i]))
                    {
                        possiveisAnagramas.Add(dicionario[i]);
                        expressaoTemp = GeradorAnagrama.retirarLetrasDaExpressao(expressaoTemp, dicionario[i]);
                        expressaoVal  = expressaoTemp;
                        int tentativa = 0;

                        //Procura outras dicionario para completar o Anagrama
                        for (int j = i; j < dicionario.Length; j++)
                        {
                            if (dicionario[j] != dicionario[i])
                            {
                                //Verifica se é uma possível combinação para Gerador Anagrama
                                if (GeradorAnagrama.validarAnagrama(expressaoVal, dicionario[j]))
                                {
                                    //Registra a linha da tentativa para não repetir
                                    if (tentativa == 0)
                                    {
                                        tentativa = j;
                                    }

                                    possiveisAnagramas.Add(dicionario[j]);
                                    expressaoVal = GeradorAnagrama.retirarLetrasDaExpressao(expressaoVal, dicionario[j]);

                                    //Verifica se for feito um Anagrama
                                    if (expressaoVal.Length == 0)
                                    {
                                        //Adiciona GeradorAnagrama na lista de anagramas válidos
                                        string anagramasStr = string.Join(" ", possiveisAnagramas);
                                        palavrasValidas.Add(anagramasStr);

                                        possiveisAnagramas.RemoveRange(1, possiveisAnagramas.Count - 1);
                                        expressaoVal = expressaoTemp;
                                        j            = tentativa + 1;
                                        tentativa    = 0;
                                    }
                                }
                                //Verifica se todas as combinações foram feitas e tenta novamente com outras palavras do dicionario
                                if (j + 1 == dicionario.Length && possiveisAnagramas.Count > 1)
                                {
                                    possiveisAnagramas.RemoveRange(1, possiveisAnagramas.Count - 1);
                                    expressaoVal = expressaoTemp;
                                    j            = tentativa + 1;
                                    tentativa    = 0;
                                }
                            }
                        }
                    }
                }
                return(palavrasValidas);
            }
            catch (Exception e)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Erro detectado!!!!");
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine(e);
                Console.ResetColor();
                throw;
            }
        }