Dificil mesmo, só falta isso para eu completar meu código.
Para um algorítmo que mostre apenas uma possibilidade… vai gastar umas 5 páginas do fórum
Nao tem como saber se é DESAFIO ou DESAFIA
PARA ou PERA
GUJIANOS… ou seja lá o que o cara quis dizer aqui… já sambou tudo
E ou A ou O
DESSA DISSO DESSE
Mas umas 10 possibilidades até q dá…
Meu algoritmo vai pelo menos mostrar todas possibilidades reais de acordo com um dicionario.
Mas ainda falta o dicionario vou montar um copiando textos. Vou ter que fazer um programa primeiro só para criar a lista de palavras =/
Ta ai uma parte do código.
Esse é o que descobre a palavra de acordo com uma Lista.
EDITADO: Código completo no post abaixo.
Main pra ver como funciona. Só falta uma lista de palavras de verdade e o algoritmo que testa todas as palavras.
Terminei meu algoritmo e com a lista de palavras que encontrei o resultado foi. Pelo menos são todas palavras reais.
desafia/desafie/desafio para/pare/pari/paro/pera/peru/pira/poro/pura/puro as/os gujianos tentam/tentem descobrir a/e/o significada/significado real dessa/desse/disse/disso frase/fresa/frese/freso/frisa/frise/friso
Agora o algoritmo.
package word;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class WordList {
private List<String> list;
public WordList(List<String> list) {
this.list = list;
}
public WordList(File file) throws FileNotFoundException {
list = new ArrayList<String>();
Scanner sc = new Scanner(new FileReader(file));
while (sc.hasNext())
list.add(sc.nextLine());
}
public WordList filter(String param) {
param = param.toLowerCase();
filterByLength(param.length());
for (int i = 0; i < param.length(); i++) {
char c = param.charAt(i);
if (c == '*')
filterByCharMatch(i, 'a', 'e', 'i', 'o', 'u');
else
filterByCharMatch(i, c);
}
return this;
}
private void filterByLength(int lght) {
List<String> newList = new ArrayList<String>();
for (String s : list)
if (s.length() == lght)
newList.add(s);
list.clear();
list.addAll(newList);
}
private void filterByCharMatch(int idx, char... criterias) {
List<String> newList = new ArrayList<String>();
main: for (String s : list) {
s = s.toLowerCase();
char c = s.charAt(idx);
for (char crit : criterias)
if (c == crit) {
newList.add(s);
continue main;
}
}
list.clear();
list.addAll(newList);
}
public String toString() {
if (list.size() == 0)
return "()";
StringBuilder builder = new StringBuilder();
for (String s : list)
builder.append(s).append("/");
builder.delete(builder.length() - 1, builder.length());
return builder.toString();
}
public List<String> getResult() {
return list;
}
public WordList clone() {
return new WordList(new ArrayList<String>(list));
}
}
package word;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
public class Sentence {
private WordList baseList;
private List<String> sentence;
{
File wordsFile = new File("C:/wordlist.txt");
try {
baseList = new WordList(wordsFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public Sentence(String s) {
sentence = new ArrayList<String>();
String[] ss = s.split(" ");
for (String str : ss)
sentence.add(str);
}
public String resolve() {
StringBuilder builder = new StringBuilder();
for (String s : sentence)
builder.append(baseList.clone().filter(s).toString()).append(" ");
return builder.toString();
}
public static void main(String[] args) {
Sentence sentence = new Sentence(
"D*S*F** P*R* *S G*J**N*S T*NT*M D*SC*BR*R * S*GN*F*C*D* R**L D*SS* FR*S*");
System.out.println(sentence.resolve());
}
}
E o arquivo de wordlist está anexado.
É… impossivel um algoritmo adivinhar exatamente que frase é. Mas cheguei perto ^^
PS: Adicionei a palavra Gujianos no dicionario por que ela não existia.
HUAhuahuuha
legal mark!
Bem interessante…
[quote=Mark_Ameba]
E o arquivo de wordlist está anexado.[/quote]
kd? O_o
Agora que reparei é que o arquivo é maior que 512Kb
Baixem desse link:
http://www.gustavoroberto.blog.br/wp-content/uploads/2008/01/wordlist_pt_br.txt
Abram e em Salvar Como… coloque wordlist.txt e no C: (Fiquei com preguiça de fazer código multi-plataforma, mas é só alterar no código)
PS:
Coma frase
“DSFO PAR S GJNS TNTEM DSCBRR O SGNFC*DO RL DSSA FRSE”
O resultado foi:
“desafio para/pare/pari/paro as/os gujianos tentem descobrir o significado real dessa frase/frese/frise”
Legal maky! Vlw…
Vo ver se tá com a reforma ortográfica, e remover um tanto de palavras inuteis, do tipo “desnivelásseis”
kkkkk
flws!