Desafio vogais:

Pessoal, um cara de um outro tópico fez uma pergunta de como transformar as vogais de uma frase digitada pelo usuário em “X”. (Eu só troquei o X por *)
Eu respondi:

[code]public class TrocaVogal {

public static void main(String[] args) {
    String[] lista = new String[]{ "A","E", "I", "O", "U",};
    
			Scanner scn = new Scanner(System.in);
			System.out.println("Digite a Palavra ou Frase: ");
	        String palavra = scn.nextLine().toUpperCase();  //passa pra maiúsculo para nao ter diferença		  
	        
	         for (int cont=0;cont<lista.length;cont++) {
	        	 palavra = palavra.replace(lista[cont],"*");
	         }
	           
	         System.out.println("Palavra com substituição: " + palavra);  
}

}[/code]
Bom, o desafio é o seguinte
Eu digitei a frase, e obtive a seguinte saída:
[color=red]Palavra com substituição:[/color] DSF** PR S GJNS. TNTM DSCBRR * SGNFCD* RL DSS FRS.

Proponho um algoritimo, que teste as possibilidades, assim descubrindo qual é a frase “escondida”…
Não é para sair chutando não… O algorítimo vai “xutar” para você, e você vai pegar a frase que tiver sentido…
Ex.: Palavra com substituição: FC
Saída:

FICI FICO FACA FOCI FICA FAFI
E muitas outras combinações
Vão ser muitas saídas… Se quiserem usar um arquivo .txt com um dicionário, para se não tiver sentido uma palavra, não ser impressa pode usar
Ex.: Nesse caso, as unicas saída seriam FICA e FACA

Ou fassam no brutal force mesmo, com todas as possiveis combinações (que são muitas).
Antes estava com “X”, mas por sugestão do marky, passei para *, para não confundir com a letra *.

Um espírito de porco já falou o que é a frase, mas o desafio continua, de um algorítimo feito para descubrir (e não a mente humana)

Boa sorte ae =D

Se eu nao estiver enganado… o número de respostas possíveis… tem mais de 20 algarismos

A resposta seria “Desafio para os gujaanes. Tentem descobrir o significado real dessa frase.”

Estou em dúvida que palavra seria GXJXXNXS, mas acho que é isso, fiz de cabeça mesmo.

Acho que ele escreveu errado…

Talvez o certo seria GUJEIROS

ichi… o desafio tá furado

Esse desafio tá muito complexo… vou deixar pro autor dele postar a resposta…

Refiz os calculos… o número de possibilidades nao tem mais de 20 algarismos…

Fiz o código aqui e testei, ta meio gambiarrado e da pra melhorar mais funciona.

[code]public void Desvendar(String mensagem) {
char[] vogais = {‘A’, ‘E’, ‘I’, ‘O’, ‘U’};
char[] nova = mensagem.toUpperCase().toCharArray();
List pos = new ArrayList();
for (int i = 0; i < nova.length; i++) {
if (nova[i] == ‘X’) {
pos.add(i);
}
}
if (!pos.isEmpty()) {
for (Iterator it = pos.iterator(); it.hasNext():wink: {
Integer elem = (Integer) it.next();
for (char v : vogais) {
nova[elem]=v;
Desvendar(String.copyValueOf(nova));
if (!String.copyValueOf(nova).contains(“X”))
System.out.println(String.copyValueOf(nova));
}
}

    }
}[/code]

A frase que você passou levaria muitooooo tempo no programa ^^. Se não me engano será 17210368 saídas.

Poxa… começei uma solução aqui… já tá dando muito mais linhas… :shock:

A minha solucao nao é recursiva…

Bem bolada essa solução…

Uma observaçao em relaçao ao algoritmo… estao sendo apresentados valores repetidos… (mas todos aparecem)

AA
AE
[color=red]EA[/color]
[color=darkblue]EE[/color]
[color=red]EA[/color]
[color=darkblue]EE[/color]

Tem algum detalhe pra resolver…

Acho que é pela caracteristica recursiva dele…

se monta uma arvore… aí aparecem esses valores duplos…

Tentei mecher aqui… mas nao deu muito certo…

Acho que agora… tá mais otimizado

[code] public void desvendar(String mensagem) {
char[] vogais = { ‘A’, ‘E’, ‘I’, ‘O’, ‘U’ };
char[] nova = mensagem.toUpperCase().toCharArray();
for (int i = 0; i < nova.length; i++) {
if (nova[i] == ‘X’) {
for (char v : vogais) {
nova[i] = v;
if (!String.copyValueOf(nova).contains(“X”))
System.out.println(String.copyValueOf(nova));
else
desvendar(String.copyValueOf(nova));

			}
			break;
		}
	}
}[/code]

rogel eu to rindo de mais disso cara, vc nao tem ideia kkkk

[code]É porque ele também nao entende de static…

Vejam:

http://www.guj.com.br/posts/list/201867.java

Já que é pra por fogo… vamos por… [/code]

[quote=evertonsilvagomesjava]rogel eu to rindo de mais disso cara, vc nao tem ideia kkkk

[code]É porque ele também nao entende de static…

Vejam:

http://www.guj.com.br/posts/list/201867.java

Já que é pra por fogo… vamos por… [/code][/quote]
hahahah… mas num é?

kkkkk, eu ri de mais hauahu

Como eu disse 1h da manhã, sono danado, rs, seu algoritmo ficou melhor mesmo, a idéia seria não usar a recursividade já que, dizem, ser um método lento, a propósito como você montou em árvore os resultados?

off: Legal este post do static, o cara realmente foi infeliz em criticar.

Seria GUJIANOS, e nao GUJAANOS!..
Mas era pra fazer com algoritimo, e não de cabeça =P

[quote=nephestos]Como eu disse 1h da manhã, sono danado, rs, seu algoritmo ficou melhor mesmo, a idéia seria não usar a recursividade já que, dizem, ser um método lento, a propósito como você montou em árvore os resultados?
[/quote]

O negócio a árvore é que achei que pela recursividade essa arvore seria montada tipo… (mas nao montei os resultados para serem impressos em forma de arvore nao…)

XX  -AX  - AA
             - AE
      -EX  - EA
             - EE

E por aí vai… causando resultados duplicados… mas acho que nao era esse o problema nao…

Mas o algoritmo nao é meu nao… é o seu… só que dei uma ajustada :smiley:

Depois eu posto que eu tava montando… terminei ainda nao…

Mas o simples fato da recursividade nao causa lentidao nao… o que pode acontecer… é que se houver muitas chamadas recursivas dá StackOverflowError

Acho o desafio interessante porem seria bom ter um dicionario :wink:

Ichi… é amigo do cara do static