Riscontro un problema solo sui test exponential

E
Edoardo Allegrini (930 points)
1 6 8
asked Dec 12, 2020 in HW8 obbligatorio by Edoardo Allegrini (930 points)

Ciao a tutti, eseguendo i test relativi all'HW8req vedo che il mio codice fallisce solamente nei test exponential.

Provo a spiegare in pseudo-codice cosa fa il mio programma nella funzione ricorsiva cosi che possiate aiutarmi:

INPUT della funzione (città_indizio, dizionario, clues, set, segreti)

Il dizionario ha come chiave la tupla (città, indizio) e come valori tutti i possibili percorsi che Nikita può seguire in base a quella chiave es. {('ROME', 'la'): [['MILAN', 'tic'], ['MILAN', 'toc'], ['MILAN', 'tac']], ('MILAN', 'la'): [['ROME', 'bing'], ['ROME', 'bong'], ['ROME', 'bang']]}

se la tupla (città ,indizio) è nel dizionario, prendo la lista corrispondente nel dizionario, per ogni sottolista:

 ricavo il segreto e la città in cui dovrò andare, quindi se la lista contenente tutti gli indizi #es. ['la', 'la', 'la', 'la']# è vuota allora aggiungo la tupla (stringa dei segreti che ho raccolo, ultima città) ad un set altrimenti richiamo la funzione ricorsiva, fuori dal for torno l'insieme finale.

Analizzando ogni chiamata di funzione ricorsiva ho notato che il codice lavora in questo modo:

esempio del test exponential4

tic bing tic bing 
tic bing toc bing 
tic bing tac bing 
tic bong tic bing 
tic bong toc bing 
tic bong tac bing 
tic bang tic bing 
tic bang toc bing 
tic bang tac bing 
toc bing tic bing 

....

Il problema sta nell'ultima parola di ogni stringa, è sempre 'bing' quando in realtà dovrebbe essere alternata 'bing', 'bong', 'bang'. Sembra come che non mi facesse l'ultima ricorsione di ogni percorso che segue. Infatti il numero di segreti che mi torna nell'insieme è 27 quando dovrebbe essere il triplo, 81 posiibili segreti per exponential4

Spero si capisca bene o male cosa fa il mio programma e che riusciate a darmi una mano per fixare questo problema, nel caso qualcosa non dovesse essere chiaro sono pronto a spiegare meglio.

1 Answer

Best answer
C
ColellaV (1040 points)
2 3 9
answered Dec 12, 2020 by ColellaV (1,040 points)
selected Dec 12, 2020 by Edoardo Allegrini

Ciao, non so com'è strutturata la tua funzione ricorsiva ma ho appena risolto lo stesso problema nel mio codice

Il problema era nel come avevo importato il caso base: anziché scorrere tutte le istruzioni possibili anche alla "foglia", non facevo finire il ciclo per ogni istruzione della città corrente, ma ritornavo subito.

Dai un'occhiata e vedi se c'è qualche return che non dovrebbe esserci

E
Edoardo Allegrini (930 points)
1 6 8
commented Dec 12, 2020 by Edoardo Allegrini (930 points)
Grazie mille, seguendo il tuo spunto e applicando un po' di modifiche sono riuscito a risolvere e a passare tutti i test, grazie ancora