Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

problema quando scorro nella matrice

s
simone.lioy (1420 points)
28 30 39
in HW8 obbligatorio by (1.4k 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?
702 views

3 Answers

a
a.pietroluongo (11250 points)
20 39 131
by (11.3k points)
edited by

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)
20 39 131
by (11.3k points)
Puoi calcolarti le (sotto)sequenze della parola
s
simone.lioy (1420 points)
28 30 39
by (1.4k points)
dici con la funzione ricorsiva? in che senso
a
a.pietroluongo (11250 points)
20 39 131
by (11.3k points)
edited by
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)
28 30 39
by (1.4k 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)
28 30 39
by (1.4k 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)
10 11 91
by (13.0k 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)
28 30 39
by (1.4k points)
grazie mille
plm (18850 points)
13 15 118
by (18.9k 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