Gerador de Palavras

Run Settings
LanguageJava
Language Version
Run Command
class Main { public static void main(String[] args) { String frase = "abc"; System.out.println("Frase: " + frase); System.out.println("* Frases geradas com tamaho fixo:"); (new GeraPalabraComTamanhoFixo()).gerar(frase); System.out.println("----------"); System.out.println("* Frases geradas com todas possibilidades: "); (new GeraPalabraTodasPossibilidades()).gerar(frase); System.out.println("----------"); System.out.println("* Letras geradas com base em um intervalo de letras: "); String caracteresIniciais = "AA"; String caracteresFinais = "CC"; (new GeraCombinacaoAlfabeto()).gerar(caracteresIniciais, caracteresFinais); System.out.println("----------"); System.out.println("* V2 - Letras geradas com base em um intervalo de letras: "); (new GeraCombinacaoAlfabetoV2()).gerar(caracteresIniciais, caracteresFinais); } }
import java.util.ArrayList; import java.util.List; class GeraPalabraComTamanhoFixo { public void gerar(String frase) { List<String> resultado = new ArrayList<String>(); geraNovaPalavra(resultado, frase, frase.length(), ""); for (String palavra : resultado) { System.out.println(palavra); } } private void geraNovaPalavra(List<String> resultado, String palavra, int tamanho, String palavraAtual) { String palavraCorrente = palavraAtual; for (int i = 0; i < palavra.length(); i++) { palavraCorrente += palavra.charAt(i); if (palavraCorrente.length() >= tamanho) { resultado.add(palavraCorrente); palavraCorrente = palavraAtual; } else { geraNovaPalavra(resultado, palavra, tamanho, palavraCorrente); palavraCorrente = palavraAtual; } } } }
import java.util.ArrayList; import java.util.List; class GeraPalabraTodasPossibilidades { public void gerar(String frase) { List<String> resultado = new ArrayList<String>(); geraNovaPalavra(resultado, frase, ""); for (String palavra : resultado) { System.out.println(palavra); } } private void geraNovaPalavra(List<String> resultado, String palavra, String palavraAtual) { String palavraCorrente = palavraAtual; for (int i = 0; i < palavra.length(); i++) { palavraCorrente += palavra.charAt(i); if (palavraCorrente.length() >= palavra.length()) { resultado.add(palavraCorrente); palavraCorrente = palavraAtual; } else { resultado.add(palavraCorrente); geraNovaPalavra(resultado, palavra, palavraCorrente); palavraCorrente = palavraAtual; } } } }
import java.util.ArrayList; import java.util.List; class GeraCombinacaoAlfabeto { public void gerar(String caracteresIniciais, String caracteresFinais) { int tamanho = caracteresIniciais.length(); List<String> sequencias = montarCombinacoes(caracteresIniciais, caracteresFinais); sequencias = normalizarSequencia(sequencias, caracteresIniciais); int totalLinhas = (int) Math.pow(sequencias.get(0).length(), tamanho); int totalGrupos = totalLinhas / sequencias.get(0).length(); List<char[]> combinacoes = new ArrayList<>(); for (int i = 0; i < totalLinhas; i++) { combinacoes.add( new char[tamanho] ); } if (tamanho == 1) { for (int i = 0; i < totalLinhas; i++) { int proximaColuna = 0; char letra = sequencias.get(0).charAt(i); montar(combinacoes, sequencias.get( proximaColuna ), letra, tamanho, i); } } else if (tamanho == 2) { for (int i = 0; i < totalGrupos; i++) { int proximaColuna = tamanho-(tamanho-1); int indice = i*totalGrupos; char letra = sequencias.get(proximaColuna-1).charAt(i); montar(combinacoes, sequencias.get( proximaColuna ), letra, tamanho, indice); } } else { System.out.println("Não foi implementado para uma sequência de " + tamanho + " caracteres."); return; } for (char[] combinacao : combinacoes) { System.out.println( String.valueOf(combinacao) ); } } public void montar(List<char[]> combinacoes, String letras, char letraBase, int tamanho, int indice) { if (tamanho == 1) { combinacoes.get(indice)[0] = letraBase; } else { for (int i = 0; i < letras.length(); i++) { combinacoes.get(indice)[0] = letraBase; combinacoes.get(indice)[1] = letras.charAt(i); indice++; } } } /** * Monta todas as combinações possíveis com base na sequencia inicial e final. * @param sequenciaInicial Sequencia inicial de caracteres. * @param sequenciaFinal Sequencia final de caracteres. * @return */ private List<String> montarCombinacoes(String sequenciaInicial, String sequenciaFinal) { List<String> sequencias = new ArrayList<>(); for (int i = 0; i < sequenciaInicial.length(); i++) { int hexaIni = sequenciaInicial.toUpperCase().charAt(i); int hexaFin = sequenciaFinal.toUpperCase().charAt(i); String sequencia = ""; for (int codigoHex = hexaIni; codigoHex <= hexaFin; codigoHex++) { sequencia += String.valueOf((char) codigoHex); } sequencias.add(sequencia); } return sequencias; } /** * Verifica as Sequencias de caracteres e completa as menores com o caractere da sequencia inicial. * @param sequencias Lista de sequencias de caracteres. * @param sequenciaInicial Sequencia inicial de caracteres. * @return */ private List<String> normalizarSequencia(List<String> sequencias, String sequenciaInicial) { int tamanho = maiorSequencia(sequencias); List<String> novasSequencias = new ArrayList<>(); for (int i = 0; i < sequencias.size(); i++) { String s = sequencias.get(i); if (s.length() < tamanho) { char letra = sequenciaInicial.toUpperCase().charAt(i); s = completarSequencia(s, letra, tamanho); } novasSequencias.add( s ); } return novasSequencias; } /** * Descobrir o tamanho da maior sequencia de caracteres. * @param sequencias Lista de sequencias de caracteres. * @return */ private int maiorSequencia(List<String> sequencias) { int tamanho = 0; for (String s : sequencias) { if (s.length() > tamanho) tamanho = s.length(); } return tamanho; } /** * Completar uma sequencia de caracteres. * @param sequencia Sequencia inicial. * @param letra Letra que deve ser adicionada, caso necessário. * @param tamanho Tamanho esperado da sequencia. * @return */ private String completarSequencia(String sequencia, char letra, int tamanho) { while (sequencia.length() < tamanho) { sequencia += letra; } return sequencia; } }
import java.util.ArrayList; import java.util.List; class GeraCombinacaoAlfabetoV2 { /** * Gera uma sequencia de caracteres permitindo até 2 níveis.<br> * Saída esperada ao informar como <code>caracteresInicias</code> a letra 'A' e <code>caracteresFinais</code> a letra 'C':<br> * A | B | C <br> * Saída esperada ao informar como <code>caracteresInicias</code> as letras 'AA' e <code>caracteresFinais</code> as letras 'CC':<br> * AA | AB | AC | BA | BB | BC | CA | CB | CC * * @param caracteresIniciais * @param caracteresFinais * @return * @throws Exception */ public void gerar(String caracteresIniciais, String caracteresFinais) { List<String> lista = montarCombinacoes(caracteresIniciais, caracteresFinais); lista = normalizarSequencia(lista, caracteresIniciais); List<char[]> combinacoes = new ArrayList<>(); for (int i = 0; i < lista.get(0).length(); i++) { if (lista.size() == 1) { combinacoes.add(new char[] { lista.get(0).charAt(i) } ); } else if (lista.size() == 2) { for (int x = 0; x < lista.get(1).length(); x++) { combinacoes.add( new char[] { lista.get(0).charAt(i), lista.get(1).charAt(x) } ); } } else { System.out.println( "Nível não implementado." ); } } for (char[] item : combinacoes) { System.out.println( item ); } } /** * Monta todas as combinações possíveis com base na sequencia inicial e final. * @param sequenciaInicial Sequencia inicial de caracteres. * @param sequenciaFinal Sequencia final de caracteres. * @return */ private List<String> montarCombinacoes(String sequenciaInicial, String sequenciaFinal) { List<String> sequencias = new ArrayList<>(); for (int i = 0; i < sequenciaInicial.length(); i++) { int hexaIni = sequenciaInicial.toUpperCase().charAt(i); int hexaFin = sequenciaFinal.toUpperCase().charAt(i); String sequencia = ""; for (int codigoHex = hexaIni; codigoHex <= hexaFin; codigoHex++) { sequencia += String.valueOf((char) codigoHex); } sequencias.add(sequencia); } return sequencias; } /** * Verifica as Sequencias de caracteres e completa as menores com o caractere da sequencia inicial. * @param sequencias Lista de sequencias de caracteres. * @param sequenciaInicial Sequencia inicial de caracteres. * @return */ private List<String> normalizarSequencia(List<String> sequencias, String sequenciaInicial) { int tamanho = maiorSequencia(sequencias); List<String> novasSequencias = new ArrayList<>(); for (int i = 0; i < sequencias.size(); i++) { String s = sequencias.get(i); if (s.length() < tamanho) { char letra = sequenciaInicial.toUpperCase().charAt(i); s = completarSequencia(s, letra, tamanho); } novasSequencias.add( s ); } return novasSequencias; } /** * Descobrir o tamanho da maior sequencia de caracteres. * @param sequencias Lista de sequencias de caracteres. * @return */ private int maiorSequencia(List<String> sequencias) { int tamanho = 0; for (String s : sequencias) { if (s.length() > tamanho) tamanho = s.length(); } return tamanho; } /** * Completar uma sequencia de caracteres. * @param sequencia Sequencia inicial. * @param letra Letra que deve ser adicionada, caso necessário. * @param tamanho Tamanho esperado da sequencia. * @return */ private String completarSequencia(String sequencia, char letra, int tamanho) { while (sequencia.length() < tamanho) { sequencia += letra; } return sequencia; } }
Editor Settings
Theme
Key bindings
Full width
Lines