Ricerca parole sulle diagonali di una matrice python

di il
3 risposte

Ricerca parole sulle diagonali di una matrice python

Salve, mi servirebbe una mano con un problema python. In input ricevo N, M, matrice N*M, K ed un elenco di K parole. Nella matrice sono disposte tutte le parole ed il mio compito è di trovarle. Le parole possono essere in orizzontale, verticale e in diagonale, ma solo da sinistra verso destra. Ho pensato di fare un somma di stringhe con un ciclo innestato, sia per quanto riguarda le parole in orizzontale che in verticale, e di fatto funziona. Il problema però lo ho con le diagonali, in quanto non riesco a capire come dovrei impostare il ciclo per far sommare di volta in volta tutte le lettere presenti su ogni diagonale. Qualcuno ha un'idea?Grazie 

3 Risposte

  • Re: Ricerca parole sulle diagonali di una matrice python

    13/01/2023 - lucertola39 ha scritto:


    non riesco a capire come dovrei impostare il ciclo per far sommare di volta in volta tutte le lettere presenti su ogni diagonale.

    Posta il codice che hai scritto sino a questo momento per risolvere il problema, così possiamo esaminarlo e fornire eventuali suggerimenti.

  • Re: Ricerca parole sulle diagonali di una matrice python

    Ciao, va bene, posto il codice, ma devi sapere che prima avevo ‘’semplificato'' ciò che mi chiedeva la traccia. Ora posto la traccia completa, che è più complessa di quello che io avevo scritto prima. 

    Questa è la traccia completa, e ora posto il mio codice.

    Ho ragionato in questo modo: mi sono creato(o almeno, questa è la mia intenzione) tre funzioni: una, che mi sostiuisce il carattere asterisco alle parole trovate in orizz, una che lo fa ma per le parole in vert, e un'altra che dovrebbe farlo in diagonale. Tutte e tre mi restituiscono la nuova matrice con gli asterischi al posto delle parole. Alla fine, faccio un controllo finale dove, se in una determinata posizione non è presente asteerisco in nessuna delle tre matrici, allora mi stampa il carattere in quella posizione. Come detto prima ,il problema lo ho con le parole in diagonale.

    def elenco(K):
        elenco=[]
        for i in range(K):
            elenco.append(input())
            
        return elenco
    
    
    def matrice(N,M):
        mat=[]
        for i in range(N):
            mat.append([])
            for j in range(M):
                mat[i].append(input())
    
        return mat
    
    def cercaRiga(mat,N,M,elenco):
        paroleCercate=[]
        somma=''
        for i in range(N):
            for j in range(M):
                somma+=mat[i][j]
                for k in range(len(elenco)):
                    if elenco[k] in somma and elenco[k] not in paroleCercate:
                        paroleCercate.append(elenco[k])
                        for h in range(j, j-len(elenco[k]),-1):
                            mat[i][h]='*'
            somma=''
                            
        return mat
    
    
    def cercaColonna(mat, N, M, elenco):
        paroleCercate=[]
        somma=''
        for i in range(M):
            for j in range(N):
                somma+=mat[j][i]
                for k in range(len(elenco)):
                    if elenco[k] in somma and elenco[k] not in paroleCercate:
                        print(somma)
                        paroleCercate.append(elenco[k])
                        for h in range(j, j-len(elenco[k]),-1):
                            mat[h][i]='*'
            somma=''
                            
        return mat
            
                
                       
    def main():
        N=int(input())
        M=int(input())
        mat=matrice(N,M)
        K=int(input())
        el=elenco(K)
    
    
    
        print(cercaDiagonale(mat, el,N, M))
    
    
    
    main()
    
  • Re: Ricerca parole sulle diagonali di una matrice python

    Un po' tortuoso come sorgente. Io lo avrei buttato giù un po' così

    def cerca_parole(matrice, parole):
        direzioni = [
            lambda i, j, l: [(i, j+k) for k in range(l)],
            lambda i, j, l: [(i+k, j) for k in range(l)],
            lambda i, j, l: [(i+k, j+k) for k in range(l)],
            lambda i, j, l: [(i+k, j-k) for k in range(l)]
        ]
        for direzione in direzioni:
            for i in range(len(matrice)):
                riga = matrice[i]
                for j in range(len(riga)):
                    for lunghezza in range(1, len(riga)-j+1):
                        sottostringa = riga[j:j+lunghezza]
                        if sottostringa in parole:
                            for x, y in direzione(i, j, lunghezza):
                                matrice[x][y] = '*'
        return matrice
    
Devi accedere o registrarti per scrivere nel forum
3 risposte