Matrici e stringhe

di Anonimizzato29127 il
4 risposte
Sono un neofita della programmazione, vi propongo un esercizio che mi ha creato qualche difficoltà:
scrivere una funzione che prenda come argomento una matrice M formata da lettere e una lista di parole. La funzione dovrà restituire quante parole della lista compaiono nelle righe e nelle colonne di M . Se una parola è contenuta più volte basterà conteggiarla una sola volta.
Mi sono un po' impantanato, mi proporreste una soluzione valida,magari che faccia minor uso possibile di funzioni built-in. Per essere più chiaro:

M=[[ 'a' , 'm' , 'o' , 'z' , 'c' ],
[ 'm' , 'g' , 'a' , 'i' , 'a'],
[ 'o', ,' r' , 's' , 'o' , 's' ],
[ 'c' , 'a' , 's' , 'a' , 'a' ]]

words= ["casa","zio","tetto","parco", "orso", "palla","gaia", "amo"]
la funzione restituirà 5, poiché 5 parole della lista sono contenute nella matrice.

4 Risposte

  • A me vengono in mente due possibili modi per risolvere:
    1) ti crei un elenco di tutte le possibili parole dalla matrice e poi verifichi quante parole ricercate ha.
    2) cerchi la prima lettera della parola nella matrice. Se c'è verifichi se nell'intorno c'è anche la seconda lettera. Se c'è puoi definire la direzione della parola in ricerca sulla quale verifichi che ci sia la terza lettera, la quarta e così via.

    La soluzione 1 è abbastanza semplice da sviluppare, la 2 è più stimolante.
  • Grazie per il suggerimento!
    Supponendo di voler utilizzare il secondo metodo che hai proposto, sarebbe utile creare un indice che scorre tutte le lettere della matrice per poi confrontarlo con la parola nella lista? Sto provando a impostare dei ragionamenti e ho individuato il problema, purtroppo sto avendo parecchie difficoltà nel "tradurre" questi ragionamenti in codice.
  • Ma scusa, crea le m+n parole (2m+2n se vuoi anche il senso inverso) e vedi quali words sono sottostringhe di almeno una parola.

    Proponi qualcosa, almeno la concatenazione dei caratteri...
  • Grazie per i suggerimenti. Ragionandoci su ho risolto i vari problemi.
Devi accedere o registrarti per scrivere nel forum
4 risposte