[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