Come creare un programmino x anagrammi
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Pag 1 di 2 12 UltimoUltimo
Visualizzazione risultati da 1 a 15 di 21

Discussione: Come creare un programmino x anagrammi

Cambio titolo
  1. #1
    Guerriero Celeste L'avatar di SkyWarrior
    Registrato il
    08-07
    Località
    In the Sky...
    Messaggi
    1.713

    Esclamazione Come creare un programmino x anagrammi

    raga salve a tutti è la prima volta ke scrivo in questa sezione e lo faccio x kiedere il vostro aiuto sulla programmazione di un programmino ke mi permetta inserendo alcune lettere di creare delle parole usandole... ora il problema sta nel fatto ke nn ho mai programmato . Vi prego aiutatemi...



    P.S. mi servirebbe se possibile ke faccia anke parole in latino . HELP ME!!!
    Se volete giocare a League of Legends usate il mio referral.

    Grazie per l'aiuto

  2. #2
    WAAAAAAAAAAAAG L'avatar di @@mikele90@@
    Registrato il
    07-06
    Località
    Pescara
    Messaggi
    3.727
    Citazione SkyWarrior Visualizza Messaggio
    raga salve a tutti è la prima volta ke scrivo in questa sezione e lo faccio x kiedere il vostro aiuto sulla programmazione di un programmino ke mi permetta inserendo alcune lettere di creare delle parole usandole... ora il problema sta nel fatto ke nn ho mai programmato . Vi prego aiutatemi...



    P.S. mi servirebbe se possibile ke faccia anke parole in latino . HELP ME!!!
    nn ho ben capito,cmq nn è propio corto,dopo fai qualche esmpio.cmq n credo ci sia gente disponibile(a meno che nn escono fuori dei soldi)

  3. #3
    Bannato
    Registrato il
    12-07
    Località
    Alessandria
    Messaggi
    10.962
    è un lavoro da pochi minuti.

    un input di tot lettere, il programma genera tutte le combinazioni casuali possibili e le controlla con quelle di un dizionario qualsiasi

  4. #4
    Guerriero Celeste L'avatar di SkyWarrior
    Registrato il
    08-07
    Località
    In the Sky...
    Messaggi
    1.713
    si e mi spighi cm si fa?
    Se volete giocare a League of Legends usate il mio referral.

    Grazie per l'aiuto

  5. #5
    Stufo L'avatar di nico402
    Registrato il
    01-06
    Messaggi
    5.779
    te l'ha appena spiegato.. per prima cosa però ti serve un file con tt le parole in latino. se no è un pò dura come cosa..


  6. #6
    Utente L'avatar di marcelloma
    Registrato il
    01-08
    Località
    Palermo
    Messaggi
    4.083
    Citazione Chobeat Visualizza Messaggio
    è un lavoro da pochi minuti.

    un input di tot lettere, il programma genera tutte le combinazioni casuali possibili e le controlla con quelle di un dizionario qualsiasi
    questo e' un metodo che funziona, un altro metodo e' quello di scorrersi tutte le parole del dizionario una volta sola e salvarsi quelle che hanno le stesse lettere.Forse il tuo metodo e' impiegherebbe tempo O(n!*logN) (dove n e' la lunghezza della parola , N il numero di parole nel dizionario) quindi esponenziale nel numero di lettere della parola, il mio O(N*n) (N volte il confronto con la parola di lunghezza n).

    @SkyWarrior: non possiamo spiegarti come si fa se prima non conosci la sintassi di un qualsiasi linguaggio di programmazione.Comincia ad impararne uno ma parti dalle cose semplici tipo fai una calcolatrice.
    Ultima modifica di marcelloma; 2-07-2008 alle 15:19:04

  7. #7
    Stufo L'avatar di nico402
    Registrato il
    01-06
    Messaggi
    5.779
    Citazione marcelloma Visualizza Messaggio
    questo e' un metodo che funziona, un altro metodo e' quello di scorrersi tutte le parole del dizionario una volta sola e salvarsi quelle che hanno le stesse lettere.Forse il tuo metodo e' impiegherebbe tempo O(n!*logN) (dove n e' la lunghezza della parola , N il numero di parole nel dizionario) quindi esponenziale nel numero di lettere della parola, il mio O(N*n) (N volte il confronto con la parola di lunghezza n).

    @SkyWarrior: non possiamo spiegarti come si fa se prima non conosci la sintassi di un qualsiasi linguaggio di programmazione.Comincia ad impararne uno ma parti dalle cose semplici tipo fai una calcolatrice.
    contando comunque che N nel suo caso non sarà più lungo di 10/15 e che l'N invece sarà molto grande, direi che il metodo migliore è quello O(n!*logN) dato che con n piccoli e con N grandi risulta comunque meglio il metodo calcoloso


  8. #8
    Utente L'avatar di marcelloma
    Registrato il
    01-08
    Località
    Palermo
    Messaggi
    4.083
    Citazione nico402 Visualizza Messaggio
    contando comunque che N nel suo caso non sarà più lungo di 10/15 e che l'N invece sarà molto grande, direi che il metodo migliore è quello O(n!*logN) dato che con n piccoli e con N grandi risulta comunque meglio il metodo calcoloso
    esatto giusta osservazione
    edit: però gia' con 15 lettere non so quanto convenga, 15! e' 1.307.674.368.000 , probabilmente un vocabolario ha meno termini
    Ultima modifica di marcelloma; 2-07-2008 alle 16:59:24

  9. #9
    Stufo L'avatar di nico402
    Registrato il
    01-06
    Messaggi
    5.779
    Citazione marcelloma Visualizza Messaggio
    esatto giusta osservazione
    edit: però gia' con 15 lettere non so quanto convenga, 15! e' 1.307.674.368.000 , probabilmente un vocabolario ha meno termini
    ma 15 lettere sono tantissime.. è + probabile gli serva avere 6 o 7 lettere. non so quante parole in latino siano + lunghe..


  10. #10
    Bannato
    Registrato il
    12-07
    Località
    Alessandria
    Messaggi
    10.962
    si ma poi serve solo a lui, non è che deve andarlo a vendere in giro. se per una parola lunga ci mette 3 minuti, non muore nessuno... o così o si attacca

  11. #11
    Utente nerdcore L'avatar di _Tommo_
    Registrato il
    03-07
    Messaggi
    2.679
    Citazione Chobeat Visualizza Messaggio
    si ma poi serve solo a lui, non è che deve andarlo a vendere in giro. se per una parola lunga ci mette 3 minuti, non muore nessuno... o così o si attacca
    IMHO si potrebbe usare l'ordine alfabetico per cercare, invece che comparare tutte le ipotesi a tutte le parole...

    es:

    asgsdf

    trovi la parola nel dizionario che starebbe prima, se esistesse, e quella che sta dopo. In mezzo c'è quella che cerchi
    Se in mezzo non c'è niente la parola non esiste.
    Credo che questo metodo possa essere molto rapido

    Cmq se il tale non ha mai programmato lo vedo decisamente difficoltoso da farsi in tempi stretti, perchè per quanto sia banale è un lavoro pallosissimo e lungo
    IndieVault.it forum: La community italiana su Game Dev & Indie Games!

  12. #12
    Utente L'avatar di marcelloma
    Registrato il
    01-08
    Località
    Palermo
    Messaggi
    4.083
    Citazione _Tommo_ Visualizza Messaggio
    IMHO si potrebbe usare l'ordine alfabetico per cercare, invece che comparare tutte le ipotesi a tutte le parole...

    es:

    asgsdf

    trovi la parola nel dizionario che starebbe prima, se esistesse
    e come la trovi? (con che algoritmo veloce intendo)
    invece si potrebbe usare una struttura dati "dizionario" (un albero ordinato) oppure semplicemente un vettore ed applicare la Ricerca Binaria

  13. #13
    Stufo L'avatar di nico402
    Registrato il
    01-06
    Messaggi
    5.779
    Citazione marcelloma Visualizza Messaggio
    e come la trovi? (con che algoritmo veloce intendo)
    invece si potrebbe usare una struttura dati "dizionario" (un albero ordinato) oppure semplicemente un vettore ed applicare la Ricerca Binaria
    un dizionario in tero da tenere in memoria è un pò complicato mi sa... metti ccaso che facciamo per ogni parola un char[20]. e il resto lo allochiamo anche dinamicamente se vuoi. direi che a metà, o prima, ci troviamo senza memoria e il programma da un segfault :P

    l'unica quindi è la ricerca sequenziale. mettendo in un vettore un numero massimo di N parole che poi verranno cambiate a fine ricerca fino ad arrivare sul fondo


  14. #14
    Utente nerdcore L'avatar di _Tommo_
    Registrato il
    03-07
    Messaggi
    2.679
    Citazione marcelloma Visualizza Messaggio
    e come la trovi? (con che algoritmo veloce intendo)
    invece si potrebbe usare una struttura dati "dizionario" (un albero ordinato) oppure semplicemente un vettore ed applicare la Ricerca Binaria
    Beh banale se il dizionario è ordinato alfabeticamente.

    "ciao"

    1 trovi c
    2 in c trovi i
    3 in i trovi a
    4 in a trovi o
    unico confronto

    fine

    Come puoi vedere non si va a ricerca, ma si trova esattamente ciò che si cerca.
    Infatti "Ciao" si trova sicuramente nelle parole che iniziano per C, e già ne cassi un 90%.
    Di questo 10% puoi togliere tutte quelle che non iniziano per ci... eccetera.
    Sicuramente è più efficiente di confrontarle sempre tutte.

    "Pseudo"codice:
    Codice:
    unsigned int start = 0; 
    unsigned int end = length of Dictionary;
    unsigned int index = 0;
    
    bool letterFound = false;
    
    string myWord;
    string word;
    
    while( !wordFound )
    {
    
        for(unsigned int i = start; i < end; i++)
        {
             word = Dictionnary[i];
    
    //la prima volta che il carattere n della mia parola e' uguale al carattere n
    //del dizionario, e' iniziato l'intervallo che ci interessa
             if(!letterFound && word[index] == myWord[index])
             {
                  start = i;
                  letterFound = true;
             }
    
    //la prima volta che e' diversa dopo essere stata uguale, l'intervallo e' finito.
             if(letterFound && word[index] != myWord[index])
             {
                  end = i;
                  letterFound = false;
                  index++;
                  break;
             }
        }
    
        //se start ed end sono uno accanto all'altro, abbiamo trovato la parola.
        if(end == start+1)
             return Dictionary[start];
    }
    Ecco, dovrebbe funzionare
    E' sempre piu' veloce di un algoritmo standard, in quanto non fa paragoni fra stringhe ma solo fra chars, e uno alla volta.
    In piu', se la parola e' tipo abaco, fa 3 cicli e finisce.
    Certo se e' ZUZZURELLONE ci mette cmq una svaria, anche se meno di altri algoritmi
    Un'idea per migliorarlo &#232; implementare un controllo "in avanti" e uno "all'indietro", in maniera da minimizzare lo spreco per le ultime lettere.

    @Nico: guarda che 50.000 (numero medio di parole in un dizionario) char[20] occupano solamente 976kb... non credo ci sia alcun problema, Gears of War occupa 980 mb
    Ultima modifica di _Tommo_; 3-07-2008 alle 09:22:37
    IndieVault.it forum: La community italiana su Game Dev & Indie Games!

  15. #15
    Stufo L'avatar di nico402
    Registrato il
    01-06
    Messaggi
    5.779
    Citazione _Tommo_ Visualizza Messaggio
    Beh banale se il dizionario &#232; ordinato alfabeticamente.

    "ciao"

    1 trovi c
    2 in c trovi i
    3 in i trovi a
    4 in a trovi o
    unico confronto

    fine

    Come puoi vedere non si va a ricerca, ma si trova esattamente ci&#242; che si cerca.
    Infatti "Ciao" si trova sicuramente nelle parole che iniziano per C, e gi&#224; ne cassi un 90&#37;.
    Di questo 10% puoi togliere tutte quelle che non iniziano per ci... eccetera.
    Sicuramente &#232; pi&#249; efficiente di confrontarle sempre tutte.

    "Pseudo"codice:
    Codice:
    unsigned int start = 0; 
    unsigned int end = length of Dictionary;
    unsigned int index = 0;
    
    bool letterFound = false;
    
    string myWord;
    string word;
    
    while( !wordFound )
    {
    
        for(unsigned int i = start; i < end; i++)
        {
             word = Dictionnary[i];
    
    //la prima volta che il carattere n della mia parola e' uguale al carattere n
    //del dizionario, e' iniziato l'intervallo che ci interessa
             if(!letterFound && word[index] == myWord[index])
             {
                  start = i;
                  letterFound = true;
             }
    
    //la prima volta che e' diversa dopo essere stata uguale, l'intervallo e' finito.
             if(letterFound && word[index] != myWord[index])
             {
                  end = i;
                  letterFound = false;
                  index++;
                  break;
             }
        }
    
        //se start ed end sono uno accanto all'altro, abbiamo trovato la parola.
        if(end == start+1)
             return Dictionary[start];
    }
    Ecco, dovrebbe funzionare
    E' sempre piu' veloce di un algoritmo standard, in quanto non fa paragoni fra stringhe ma solo fra chars, e uno alla volta.
    In piu', se la parola e' tipo abaco, fa 3 cicli e finisce.
    Certo se e' ZUZZURELLONE ci mette cmq una svaria, anche se meno di altri algoritmi
    Un'idea per migliorarlo &#232; implementare un controllo "in avanti" e uno "all'indietro", in maniera da minimizzare lo spreco per le ultime lettere.

    @Nico: guarda che 50.000 (numero medio di parole in un dizionario) char[20] occupano solamente 976kb... non credo ci sia alcun problema, Gears of War occupa 980 mb
    avevo in mente dizionari giganteschi

    non &#232; che non abbia mai preso in mano un dizionario


Pag 1 di 2 12 UltimoUltimo

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •