problema quando scorro nella matrice

s
simone.lioy (1420 points)
23 30 39
asked Dec 18, 2019 in HW8 obbligatorio by simone.lioy (1,420 points)
ho un problema quando controllo la matrice e con l'if controllo allo stesso tempo se c'è una parola a destra, il problema si pone quando controllo la lista delle parole e siccome la lista delle parole è più grande di altezza rispetto la matrice, infatti mi va in out of range. un altro problema anzi un consiglio mica mi potete dare una mano nella ricorsione?
409 views

3 Answers

a
a.pietroluongo (11250 points)
15 38 131
answered Dec 18, 2019 by a.pietroluongo (11,250 points)
edited Dec 18, 2019 by a.pietroluongo

prova a controllare se le coordinate sono dentro la matrice cioè confronta gli indici di riga  e colonna: altezza len(matrice) e larghezza len(matrice[0])

a
a.pietroluongo (11250 points)
15 38 131
commented Dec 18, 2019 by a.pietroluongo (11,250 points)
Puoi calcolarti le (sotto)sequenze della parola
s
simone.lioy (1420 points)
23 30 39
commented Dec 18, 2019 by simone.lioy (1,420 points)
dici con la funzione ricorsiva? in che senso
a
a.pietroluongo (11250 points)
15 38 131
commented Dec 19, 2019 by a.pietroluongo (11,250 points)
edited Dec 19, 2019 by a.pietroluongo
Se chiami la funzione sulle (sotto)sequenze della parola sei sicuro di finire su uno dei casi base, ad esempio len(parola)==1
esempio

def funzione(parola, n):
    se caso base: # Condizione di uscita
        istruzioni
    altrimenti:
        istruzioni
        funzione(sottosequenze della parola, n) # Passo ricorsivo
s
simone.lioy (1420 points)
23 30 39
commented Dec 19, 2019 by simone.lioy (1,420 points)
quindi io dovrei prendere una parola della lista per esempio quelle per destra e dovrei andare a ritroso della parola fino a quando non è uguale a 1, n per che sta che non ho capito
s
simone.lioy (1420 points)
23 30 39
commented Dec 19, 2019 by simone.lioy (1,420 points)
ho creato la funzione che mi divide in due liste le parole che hanno lettere uguale a destra e una lista che hanno lettere uguale giu, questa funzione mi ritorna queste due liste
Tommaso Sgroi (12990 points)
6 11 91
answered Dec 18, 2019 by Tommaso Sgroi (12,990 points)

Durante il controllo piuttosto che andare sommare 1 per andare alla coordinata, somma una variabile D (destra) e G (giù) che possono assumere valori 0 e 1 a seconda se stai o meno sui bordi della tua matrice.

Oppure più semplicemente sui tuoi controlli degli if, puoi mettere per primo, un controllo del tipo:

  • if mi trovo alla lunghezza r==lughezza della matrice-1 allora non devo guardare a destra della matrice
  • if mi trovo alla altezza c==alteza della matrice-1 allora non devo guardare sotto alla matrice

Questo lo puoi fare semplicemente mettendo questo tipo di controllo all'interno dei tuoi if seguito da un and, così che appena trova un elemento falso seguito da un and salta tutti gli altri controlli e continua l'esecuzione.

s
simone.lioy (1420 points)
23 30 39
commented Dec 18, 2019 by simone.lioy (1,420 points)
grazie mille
plm (18850 points)
7 15 118
answered Dec 18, 2019 by plm (18,850 points)
Un trucchetto sarebbe aggiungere come bordi delle parole/simboli che sicuramente non potrai trovare nelle parole... così l'out of range diventa impossibile in quanto la ricorsione si fermerebbe prima