[Python] Python Anagram Contest was Tesseract

Giovanni Porcari giovanni.porcari a softwell.it
Lun 11 Gen 2016 20:20:05 CET


> Il giorno 11 gen 2016, alle ore 17:24, enrico franchi <enrico.franchi a gmail.com> ha scritto:
> 
> 
> 2016-01-11 7:39 GMT+00:00 Andrea D'Amore <and.damore a gmail.com>:
> Oh, io ho "starrato" il dizionario e ho unito i file, ma che
> dizionario italiano è quello che ha tutte le singole lettere
> dell'alfabeto tra i lemmi insieme a "roof" e "road"?
> 
> Beh, l'autore riporta i criteri secondo cui l'ha compilato...
> 
> Dopo di che, le singole lettere mi sembra corretto che ci siano. A "noi" non fa comodo, ma per la lingua italiana sono parole valide (le parole che si usano per denotare le suddette lettere...). 
> 
> Per le parole straniere, ha spiegato il criterio secondo cui le ha incluse. Non sono sicuro che sia ottimale per noi, ma non volevo spendere due vite e mezzo a fare review del miglior dizionario... ;)
> 
> 


In effetti considerando le lettere singole aumenta molto il numero dei risultati e il tempo.

Con l'algoritmo migliore che sono riuscito a fare ottengo, mettendo 1 come lunghezza minima:

Topobook:Desktop gporcari$ time python anagrams.py 1 marco beri
Parole da: 1 a: 9 caratteri. Caratteri totali: 9
Numero anagrammi trovati :10234

real	0m21.287s
user	0m21.122s
sys	0m0.096s

Con il limite di 2 è molto meglio :

Topobook:Desktop gporcari$ time python anagrams.py 2 marco beri
Parole da: 2 a: 9 caratteri. Caratteri totali: 9
Numero anagrammi trovati :1347

real	0m1.254s
user	0m1.158s
sys	0m0.067s


Per Nicola Larosa abbiamo 41234 anagrammi in 7.2 secondi

Topobook:Desktop gporcari$ time python anagrams.py 2 nicola larosa
Parole da: 2 a: 12 caratteri. Caratteri totali: 12
Numero anagrammi trovati :41234

real	0m7.235s
user	0m7.089s
sys	0m0.088s

Con Enrico Franchi abbiamo  33967 anagrammi in ben 34.7 secondi:

Topobook:Desktop gporcari$ time python anagrams.py 2 enrico franchi
Parole da: 2 a: 12 caratteri. Caratteri totali: 13
Numero anagrammi trovati :33967

real	0m34.777s
user	0m34.554s
sys	0m0.131s

Trovare i 134995 anagrammi di Manlio Perillo ci costa quasi un minuto.

Topobook:Desktop gporcari$ time python anagrams.py 2 manlio perillo
Parole da: 2 a: 12 caratteri. Caratteri totali: 13
Numero anagrammi trovati :134995

real	0m56.921s
user	0m56.458s
sys	0m0.237s

Ora per quanto Manlio sia un'ottima persona, 134995 anagrammi sono troppi da leggere. 
Proviamo ad aumentare la lunghezza minima a 3 e abbiamo un risultato meno 'prolisso':

Parole da: 3 a: 12 caratteri. Caratteri totali: 13
Numero anagrammi trovati :13747

real	0m3.188s
user	0m3.086s
sys	0m0.068s

E per me con 2 non ci provo nemmeno e passo subito a 3:

Topobook:Desktop gporcari$ time python anagrams.py 3 giovanni porcari
Parole da: 3 a: 12 caratteri. Caratteri totali: 15
Numero anagrammi trovati :136078

real	0m36.567s
user	0m36.185s
sys	0m0.200s


Ma con 4 è molto meglio :

Topobook:Desktop gporcari$ time python anagrams.py 4 giovanni porcari
Parole da: 4 a: 12 caratteri. Caratteri totali: 15
Numero anagrammi trovati :17666

real	0m3.680s
user	0m3.556s
sys	0m0.077s



Il codice ora è un po' più lungo :

Topobook:Desktop gporcari$ wc -c anagrams.py
    2602 anagrams.py


Da ultimo Guido:

Topobook:Desktop gporcari$ time python anagrams.py 3  guido van rossum
Parole da: 3 a: 12 caratteri. Caratteri totali: 14
Numero anagrammi trovati :13935

real	0m14.880s
user	0m14.670s
sys	0m0.117s


Ciao 

G





Maggiori informazioni sulla lista Python