Italian La prossima settimana, VACANZE... ma per ora vado avanti

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Già lo so che Erel dice sempre di non usare gli Emulatori.... ma, purtroppo, servono eccome (anche perché penso che nessuno di noi possegga tutti i display del caso 7", 10", etc) :(
Si, io dto cercando di creare proprio u algoritmo che mi posa visualizzare le possibili frasi che possa comporre con determinate parole (una volta trovate ci vuole poco ad ordinarle per lunghezza :D, anche se a me , questa opzione, non servirebbe ;)).
E' successa anche a me la stessa cosa... sullo smartphne funzionava, sull'emulatore NO.... ma questo è un limite, perché NON posso sapere come si comporterebbe su un altro dispositivo diverso dal mio :( ("Pensieri D'Amore" ne è un esempio :()
Sicuramente "Emulare" un dispositivo, specialmente riguardo le risorse Online, non è una cosa semplice (vedi lil mio giochino che, sul mio smartphone, gira che è una meraviglia.... ugli emulatori va a rilento.... eppure ho un I7 con i contro!)
 

LucaMs

Expert
Licensed User
Longtime User
Guarda, un modo che mi viene in mente è (ma non penso sia molto veloce, quindi intanto cerco :))

Nel DB le parole devono essere ordinate alfabeticamente (e inserite tutte maiuscole o tutte minuscole);
poi devi iniziare a fare tutte le permutazioni con le lettere a disposizione; cioè, per esempio:

mettiamo siano solo 6 lettere:

NAIRMO

dovrai creare tutte le combinazioni di due lettere e cercare nel DB con la query di tipo LIKE, cioè chiedendogli le parole che iniziano con quelle due lettere

uhm mentre scrivo, mi rendo conto che è arduo, così, e probabilmente lento.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
....già, infatti era quello che avevo già pensato... però ho paura che sia troppo lenta la cosa (calcolando che il DB ha 280000 termini).
Sicuramente, metterei un WHERE con lunghezza =>3 e <="lunghezza frase" , in modo da scremare le parole.
Avrei pensato di mettere ogni singola lettera in un array e estrapolare in una lista SOLO le parole che siano corrispondente

Buona notte!
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Grazie per la segnalazione ma... da qui mi accorgo come sono rimasto indietro con la programmazione! :(
Io conosco il VB6 ma il VB.Net sembra quasi un altro linguaggio :eek:.... capisco meglio quello in PHP :D:D:D
Ora, non so se mi è chiaro ma... questo tira fuori tutte le possibili combinazioni o solo anagramma? No, perché l'anagramma si basa sul numero esatto delle lettere (quindi se da 5, trova tutte le possibili combinazioni da 5 ma non da 4, 3, etc :rolleyes:).
Non so questo com si comporta.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Non è per l'impiccato che mi serve... ma per il gioco.
Avendo inizialmente 7 lettere per la parola massima, ma con un minimo i 3 per la minima.... ecco che servirebbe trovare tutte le parole possibili da 3 a 7 lettere.
Calcolando poi che, nei livelli successivi, le lettere aumenteranno fino ad arrivare a 10....
Non capisco questi come diamine fano e così velocemente :(:(:(

http://www.findallwords.com/wordfin...=&ulast=&umaxl=max&unumber=&umatch=&ucontain=
 

LucaMs

Expert
Licensed User
Longtime User
Non è per l'impiccato che mi serve... ma per il gioco.
Avendo inizialmente 7 lettere per la parola massima, ma con un minimo i 3 per la minima.... ecco che servirebbe trovare tutte le parole possibili da 3 a 7 lettere.
Calcolando poi che, nei livelli successivi, le lettere aumenteranno fino ad arrivare a 10....
Non capisco questi come diamine fano e così velocemente :(:(:(

http://www.findallwords.com/wordfin...=&ulast=&umaxl=max&unumber=&umatch=&ucontain=


Col giusto algoritmo.

Vedrò se quello in VB.Net è buono
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
...sai cosa stavo pensando? ...ma in fin dei conti cosa mi frega di dover trovare TUTTE le parole da 3 in poi? :confused:
Cavolo, già in una frase da 7 lettere, penso che se ne possano fare parecchie di mosse
Ho fatto una prova e con le lettere:

TTAMLUI

si avranno le seguenti possibilità:

7Lettere = 2
6Lettere = 7
5Lettere = 18
4Lettere = 30
3Lettere = 19

Totale = 76 parole di senso compiuto (oddio, effettivamente me ne sarei aspettate di più :eek::()

Comunque, a questo punto, mi basta sapere anche SOLO le parole da 7 (il massimo) di lettere che si possano fare (quindi Anagramma).
Potreifare in modo che, nel caso ce ne siano più di 2 e ne vengano trovate 3 in una livello, potrei far apparire tipo una ruota della fortuna con dei Bonus (lettera in più per un Tot di tempo, tempo extra, etc)... logicamente per il livello successivo ;)
 

LucaMs

Expert
Licensed User
Longtime User
Booohhhh

Intanto posso dirti che, a occhio, quello in VBNet dev'essere una gran cag...ta.

Poi, che non ho trovato il mio post :confused::mad::confused:

Quella prova con TTAMLUI ti ha trovato quel numero di parole valide? Perché le combinazioni (permutazioni) sono molte di più!
 

LucaMs

Expert
Licensed User
Longtime User
Col giusto algoritmo.

Vedrò se quello in VB.Net è buono
Non è per l'impiccato che mi serve... ma per il gioco.
Avendo inizialmente 7 lettere per la parola massima, ma con un minimo i 3 per la minima.... ecco che servirebbe trovare tutte le parole possibili da 3 a 7 lettere.
Calcolando poi che, nei livelli successivi, le lettere aumenteranno fino ad arrivare a 10....
Non capisco questi come diamine fano e così velocemente :(:(:(

http://www.findallwords.com/wordfin...=&ulast=&umaxl=max&unumber=&umatch=&ucontain=


Non so come fanno, ma trovano stupidaggini (per essere educati)
per TTAMLUI trova:
lutati
lumati
umati
tatui

non penso che quelle 4 esistano!

e nemmeno lutai, lumai ed altre
 

LucaMs

Expert
Licensed User
Longtime User
Ho trovato questo in Java... se qualche anima pia... se lo pja e lo traduce o librerizza... :)

B4X:
import java.io.*;
import java.util.*;
import javax.swing.JOptionPane;

class Base{
  
    short[]letters=new short[26];
  
    public Base(String word){
        for(int i=0;i<word.length();i++){
            letters[word.charAt(i)-97]++;
        }
    }
  
    public boolean equals(Object x){
        if(x!=null && x.getClass().equals(this.getClass())){
            Base a=(Base)x;
            for(int i=0;i<this.letters.length;i++)
                if(this.letters[i]!=a.letters[i])return false;
          
            return true;
        }
        return false;
    }
  
}

public class anagrams {
      
    public static void main(String[] args) throws IOException, FileNotFoundException{
        BufferedReader input = new BufferedReader(new FileReader("words.txt"));
        List <String> dict=new ArrayList<String>();
      
        String word=input.readLine();
        while(word!=null){
            dict.add(word);
            word=input.readLine();
        }
      
        String key=JOptionPane.showInputDialog("Inserisci la parola di cui cercare gli anagrammi: ");
      
        Base x=new Base(key);
        Iterator <String> i=dict.iterator();
        List <String> anag=new ArrayList<String>();
      
        while(i.hasNext()){
            String temp=i.next();
            if((new Base(temp)).equals(x))
                anag.add(temp);
        }
      
        System.out.println("Gli anagrammi della parola " + key + " presenti del dizionario sono:");
        Iterator <String> i2=anag.iterator();
      
        while(i2.hasNext()){
            System.out.println(i2.next());
        }
      
    }
}


[P.S. In un file di testo???]
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Cavolo non ci avevo pensato ad usare le chiavi! :eek::eek:
A questo punto, aggiorno il mio DB con un nuovo campo CHIAVE ed inserisco le chiavi. ;)
La cosa è veramente fantastica ma funziona solo su anagrammi (quindi della stessa lunghezza), giusto?
A me, basterebbe per il raggionamento detto sopra... però, non capisco se ci sarebbe un modo per selezionare anche quelle con meno lettere.

Mi spiego:
ES:

PAROLANDO = AADLNOOPR

Nel caso nel DB ci fosse:

PAROLA = AALOPR

Come si vede, AADLNOOPR è presente in AALOPR ma ha la differneza di AAdLnOPR.
Facendo una Select, c'è un modo per trovare AADLNOOPR all'interno del campo chiave?:confused:

Il problema è che se cerco la parola più lunga, non ho il risultato su quelle più corte... quindi dovrei cercare TUTTE le parole ma, impiegherei un sacco di tempo

Select * from DB where Chiave like "%A%A%L%O%P%R%"... riuscirei a trovare anche parole più grandi ma dovrei scorrere TUTTO il DB ed è una cosa impossibile!
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Aspetta che ho corso troppo nella risposta precedente.

O meglio, è vero che probabilmente è impossibile con una query cercare etc.

Però... peeeero (Mai dire...)

potresti cercare con ogni parola come se avessi sempre una lettera in meno.

Mi sto rinco..ndo ma credo si possa (se poi, nel frattempo, qualcuno mi risolvesse le domande che ho posto anche sul Questions, non sarebbe male :D)
 
Top