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(); }
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; } }