E queste parole devono essere pure limitrofe (la lettera finale di una
deve essere adiacente alla prima lettera della seconda) oppure no?
Ad ogni modo bisogna partire da una funzione che risolva la tua matrice
per una singola parola (il paroliere classico).
Poi, per ciascuna parola che trova, sostituisce alle sue lettere una
lettera neutra (es il ?) e rilancia la risoluzione su quello che resta,
trovando tutte le seconde parole, quindi analogamente lo fa per la terza.
Il tempo di elaborazione sara' piuttosto lunghetto, ma fattibile.
Non credo che esista nulla di gia' pronto.
Conviene partire da una procedura che risolva il paroliere ed adattarla
alle tue esigenze.
Esatto.
> E queste parole devono essere pure limitrofe (la lettera finale di una
> deve essere adiacente alla prima lettera della seconda) oppure no?
No, le parole non devono essere necessariamente limitrofe.
> Ad ogni modo bisogna partire da una funzione che risolva la tua matrice
> per una singola parola (il paroliere classico).
>
> Poi, per ciascuna parola che trova, sostituisce alle sue lettere una
> lettera neutra (es il ?) e rilancia la risoluzione su quello che resta,
> trovando tutte le seconde parole, quindi analogamente lo fa per la terza.
Bravo, è proprio quello che intendo. Trova la prima parola, "cancella" le
lettere della prima parola, e trova la seconda. Ancora così fino alla terza.
Poi mi classifica i risultati secondo le lettere utilizzate, mi interessa il
gruppo di tre parole che utilizza più lettere possibili.
> Il tempo di elaborazione sara' piuttosto lunghetto, ma fattibile.
>
> Non credo che esista nulla di gia' pronto.
> Conviene partire da una procedura che risolva il paroliere ed adattarla
> alle tue esigenze.
Tu sei un programmatore? Potresti realizzare qualcosa del genere, ovviamente
con compenso?
> Tu sei un programmatore? Potresti realizzare qualcosa del genere, ovviamente
> con compenso?
Beh, e' facilino.
In mezzora = 50 euro te lo posso fare :-)
purche' non sia un compitino di scuola,
nel qual caso ti devi arrangiare.
g.
Ciao Giovanni,
no la scuola l'ho già finita da un pezzo ;-)
A che indirizzo e-mail posso scriverti?
> Ciao Giovanni,
> no la scuola l'ho gią finita da un pezzo ;-)
> A che indirizzo e-mail posso scriverti?
g.resta /chiocciola/ iit.cnr.it
ma solo se puoi aspettare almeno fino a domenica.
Prima ho da fare.
(E' vero che di "testa" ci vuole una
mezzora, siccome ho gia' fatto cose simili
e posso riciclare del codice,
ma per mettere a posto i piccoli dettagli
stupidi e noiosi tipicamente ci vuole un po' di piu')
Se qualcuno altro si offre gli cedo volentieri
il posto e gli do pure consigli "agratis" su come fare
il programma...
La cosa che mi lascia perplesso e' perche'
uno sia addirittura disposto a pagare
per risolvere un problema simile.
g.
PS. Chiunque mi scriva in privato e'
pregato di firmarsi con nome e cognome,
non come BingoBongo, YumaYuma, Gattina2, etc.etc.
Ciao, ti ho scritto in privato!
Come gią accennato, visto che non sono riuscito a trovare niente del genere
su Internet nč ho le conoscenze necessarie per programmarlo, non credo di
avere altra alternativa che chiederlo a qualcuno! Certo non ci spenderei 200
euro ;-)
Rientro in questa interessante discussione, un po' OT, ma neanche tanto.
Un qualsivoglia programma di risoluzione del gioco del paroliere e sue
varianti (come quella richiesta) si deve necessariamente appoggiare ad
un dizionario, ovvero ad un elenco di parole valide per la risoluzione
del gioco.
Il programma poi si limita a verificare quali parole di questo elenco
sono presenti nella matrice di lettere.
Per cui la domanda e': questo elenco c'e' gia'?
Perche' senza di questo elenco, il programma non puo' funzionare.
Il resto e' un divertente esercizio di programmazione.
Beh certo, ma questo credo fosse scontato! Il programma deve attingere le
parole "valide" da un dizionario in formato testuale. Se ne può utilizzare
uno scaricato da Internet, fosse quello per me il problema!
Nelle specifiche di programmazione sono abituato a non dare mai nulla
per scontato, avendo quotidianamente a che fare con implementazioni
specificate a spanne sulle quali devo dare delle tempistiche.
In che ambiente dovrebbe girare questa procedura?
Windows.
Ho riesumato una mia vecchia procedura per risolvere il gioco del
paroliere e sto provando ad adattarla al tuo problema.
Si dovrebbe poter fare, ma c'e' un problema che non ero riuscito a
risolvere neanche a suo tempo.
La procedura e' ricorsiva ed esaustiva.
Ovvero trova tutte le disposizioni possibili di tutte le parole di un
file dizionario all'interno di una griglia MxN di paroliere.
Vale a dire che se una certa parola, diciamo "CAVALLO" e' presente piu'
volte nello schema, o e' ottenibile prendendo le lettere ripetute in
ordine diverso, questa procedura le considera comunque soluzioni possibili.
Paradossalmente nel tuo caso questa cosa torna utile, perche' magari se
la parola fosse ottenibile in due modi diversi, ma se presa nel secondo
dei due modi, restano libere altre lettere strategiche per formare altre
due parole lunghe, la cosa funziona.
Di questa procedura ho il sorgente in linguaggio C.
Cerco di adattarla alla tua esigenza, e vedo che cosa salta fuori.
Mi intrometto anche se è un po' OT...
Un annetto fa ho scritto un dizionario (in C) un po' particolare per fare
delle ricerche particolari da usare soprattutto come aiuto per risolvere
rebus (di cui mio papà, una conoscenza di Giovanni, è un appassionato
risolutore) tuttavia ho sempre avuto molti problemi a trovare un dizionario
completo.
In particolare ho trovato difficoltà a trovare tutti i verbi già coniugati
in tutti i possibili modi. Nella versione attuale sono arrivato ad avere
circa 700.000 parole tuttavia per come l'ho creato al suo interno ci sono
alcune parole che non sono italiane ma latine o di altre lingue, il che crea
molti problemi. Ho anche altre liste molto più limitate ma corrette.
Ovviamente mettersi a passare il file a mano controllando tutte le parole è
impraticabile.
Qualcuno sa dove posso trovare un dizionario completo ?
Un'altra caretteristica che mi interesserebbe serebbe avere una lista parole
che permetta di distinguere tra nomi, verbi, aggettivi, ecc (cosa che per la
risoluzione di rebus sarebbe molto interessante).
Per quanto riguarda questo problema penso che il codice non sia
complicatissimo da scrivere semmai potrebbe essere difficile rendere i tempi
di esecuzioni accettabili (soprattutto se il dizionario è molto ampio)
> Mi intrometto anche se è un po' OT...
> Qualcuno sa dove posso trovare un dizionario completo ?
Purtroppo no. E anche dove trovare un lemmario (quindi
parole classificate per categoria: nomi, verbi, avverbi, etc.)
mi sfugge. Alcuni anni fa ero quasi riuscito a farmelo
dare da dei ricercatori di linguistica computazionale, ma
poi per complicazioni nella mia vita non ho battuto il ferro
finche' era caldo...
> Per quanto riguarda questo problema penso che il codice non sia
> complicatissimo da scrivere semmai potrebbe essere difficile rendere i tempi
> di esecuzioni accettabili (soprattutto se il dizionario è molto ampio)
Non era complicatissimo, ma avendolo finito e consegnato a YumaYuma,
posso dire di averci messo ben piu' della mezzora che avevo "sparato".
Anche perche' in corso d'opera sono state introdotte delle varianti
che hanno complicato ulteriormente la faccenda (per esempio,
il fatto che fosse accettabile anche una soluzione con 1 o 2 parole
invece di 3 ed un meccanismo di punteggio dipendente sia dalla
lunghezza sia dalle lettere)
ciao,
g.
> Non era complicatissimo, ma avendolo finito e consegnato a YumaYuma,
> posso dire di averci messo ben piu' della mezzora che avevo "sparato".
> Anche perche' in corso d'opera sono state introdotte delle varianti
> che hanno complicato ulteriormente la faccenda (per esempio,
> il fatto che fosse accettabile anche una soluzione con 1 o 2 parole
> invece di 3 ed un meccanismo di punteggio dipendente sia dalla
> lunghezza sia dalle lettere)
Per la ricerca della seconda e della terza parola, sei ripartito
dall'inizio del dizionario oppure dal punto in cui eri?
Perche' mi sono posto il problema e non sono riuscito a darmi una
risposta certa.
Intuitivamente sembrerebbe che, una volta collocata la prima parola, per
cercare la seconda dovrei memorizzare la posizione nel file dizionario e
provarle tutte da dove sono arrivato fino alla fine, senza partire ogni
volta dall'inizio, ma poi con la terza parola da cercare, mi sono sorti
dei dubbi.
Questo aspetto rientrerebbe in topic perche' potrebbe essere
considerato, a ragione, un enigma di logica.
--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
> Per la ricerca della seconda e della terza parola, sei ripartito
> dall'inizio del dizionario oppure dal punto in cui eri?
> Perche' mi sono posto il problema e non sono riuscito a darmi una
> risposta certa.
non saprei. Io non cerco le parole in un ordine.
Sostanzialmente parto da una lettera (quindi ripeto la
ricerca per ogni lettera di partenza) e ricorsivamente
costruisco una stringa percorrendo le lettere disponibili.
Ad ogni passo che faccio controllo se quello che ho
ottenuto e' un possibile prefisso di parola:
se non lo e' allora posso abbandonare questo ramo.
Se e' un prefisso possibile allora controllo se
e' anche una parola.
Se non e' una parola allora invoco la procedura ricorsivamente
per andare avanti cioe' ad aggiungere una nuova lettera alla stringa
corrente, altrimenti, se e' una parola, allora
mi segno che punteggio fa e poi, se non e' la terza di
un set di parole, invoco un'altra ricerca (per la seconda o terza
parola) sulle lettere rimanenti.
per evitare (almeno parzialmente) di generare le stesse triple
piu' e piu' volte, impongo che le 3 parole
abbiano lunghezze non crescenti.
Cioe' se la prima ricerca ha fornito una parola
lunga 8 caratteri allora la seconda parola impongo
che abbia una lunghezza al massimo 8.
Sicuramente si puo' fare di meglio, ma cercavo
qualcosa che funzionasse in tempi ragionevoli
senza doverci perdere tutto il weekend...
Anche la raccolta delle, diciamo 50, soluzioni
migliori puo' presentare qualche problema di efficienza.
ciao,
g.
> Roberto Montaruli wrote:
>
> > Per la ricerca della seconda e della terza parola, sei ripartito
> > dall'inizio del dizionario oppure dal punto in cui eri?
> > Perche' mi sono posto il problema e non sono riuscito a darmi una
> > risposta certa.
>
> non saprei. Io non cerco le parole in un ordine.
> Sostanzialmente parto da una lettera (quindi ripeto la
> ricerca per ogni lettera di partenza) e ricorsivamente
> costruisco una stringa percorrendo le lettere disponibili.
> Ad ogni passo che faccio controllo se quello che ho
> ottenuto e' un possibile prefisso di parola:
> se non lo e' allora posso abbandonare questo ramo.
CUT
Ah! Ho capito.
Io invece avevo sviluppato una procedura con un approccio opposto.
Parto dal dizionario.
Prendo la parola successiva.
Cerco nella griglia se c'e' l'iniziale.
Se non trovo l'iniziale, la parola non c'e'.
Se trovo l'iniziale, allora parto dall'iniziale e cerco la seconda
lettera nelle 8 caselle intorno, se la trovo cerco la terza nelle 8
caselle intorno a questa etc...
Naturalmente flaggando le lettere gia' uscite.
Alla fine della ricorsione o ho trovato tutte le lettere e allora ho una
soluzione, oppure ad un certo punto non trovo la lettera successiva e
allora la parola non c'e'.
In termini di efficenza non saprei dire quale dei due metodi sia piu'
valido.
Pero' col mio metodo si migliora in efficienza se le parole nel
dizionario sono memorizzate dalla piu' lunga alla piu' corta piuttosto
che in ordine alfabetico.
http://www.evolinfo.it/paroliere/super.html
saludos
"YumaYuma" <yu...@yu.ma> ha scritto nel messaggio
news:4602ce73$0$808$4faf...@reader5.news.tin.it...