Newsgroup: it.hobby.enigmi
Titolo: Programma per ricerca parole griglia

Ciao a tutti,
sto cercando un programma che abbia una funzione particolare.
Ho una griglia di lettere, dalle dimensioni variabili (es. 4x4, 5x5, 7x5). 
Devo trovare gruppi di tre parole all'interno di questa griglia. Posso 
muovermi in tutte le direzioni, anche diagonalmente, ma posso utilizzare una 
volta la stessa lettera per ogni sessione. Non per ogni parola, ma per ogni 
insieme di tre parole. Mi interessa sapere quindi quali solo tutti i gruppi 
di tre parole ricercabili all'interno della griglia, utilizzando le lettere 
al massimo una volta. Ho provato Cross+A, ha una funzione simile, ma mi 
trova *tutte* le parole all'interno della griglia... quindi se uso magari 
quella più lunga, la penultima non la posso scrivere perchè una delle 
lettere è già stata utilizzata... Spero che la richiesta sia abbastanza 
chiara! ;-) 

YumaYuma ha scritto:

Cioe' tu vorresti risolvere una specie di PAROLIERE trovando pero' 
all'interno della matrice gruppi di tre parole usando tutte lettere 
distinte.
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.

 alle tue esigenze.
Tu sei un programmatore? Potresti realizzare qualcosa del genere, ovviamente 
con compenso? 

 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.

 ha scritto nel messaggio 
news:eu0bmp$n9u$1...@news.cineca.it...

Ciao Giovanni,
no la scuola l'ho già finita da un pezzo ;-)
A che indirizzo e-mail posso scriverti? 

 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.

 g.
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 ;-) 

 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.

 ha scritto nel messaggio 
news:AGUMh.21440$6.1...@tornado.fastwebnet.it...

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! 

YumaYuma ha scritto:

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?

 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.

 ha scritto nel messaggio 
news:I2iNh.23669$6.1...@tornado.fastwebnet.it...

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)

 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.

 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

 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.

 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.


 ha scritto nel messaggio 
news:4602ce73$0$808$4faf...@reader5.news.tin.it...
