Ordine dei rettangoli

M
Mic_s (670 points)
2 16 22
asked Dec 2, 2020 in HW6 obbligatorio by Mic_s (670 points)
Per calcolare l'ordine dei rettangoli utilizzo un dizionario con tutti i colori e le rispettive intersezioni e un ciclo while che esegue il codice finchè la lunghezza del dizionario è maggiore di 0. Poi scorro tutti i colori e se uno di questi non è presente nel dizionario significa che non ha intersezioni quindi è il primo. In seguito controllo con un altro for dentro il for se per ogni colore nel dizionario è presente l'intersezione col primo (quello non nel dict) o se è l'unica intersezione che ha. Se è l'unica lo rimuovo dal dizionario così che con il prossimo ciclo del while possa fare la stessa cosa fatta precedentemente e aggiungerlo alla lista dell'ordine. Purtroppo però non passo 2 test proprio per questa funzione (la lunghezza dell'immagine è minore di uno quindi un rettangolo non viene aggiunto nella lista ordine). Qualcuno può aiutarmi ad ottimizzarlo o capire perchè solo quei due test non passano?

Grazie in anticipo.

3 Answers

Fabioerpini (7970 points)
6 10 27
answered Dec 2, 2020 by Fabioerpini (7,970 points)
Cosa intendi con lunghezza dell'immagine?
M
Mic_s (670 points)
2 16 22
commented Dec 2, 2020 by Mic_s (670 points)
la mia immagine è formata da un pixel in meno in altezza rispetto a quella dei test
c
c.olivato (340 points)
2 4 6
answered Dec 2, 2020 by c.olivato (340 points)
Invece di annidare dei for, potresti provare questa strada:

dato che hai menzionato un dizionario dei colori con le proprie intersezioni, suppongo tu abbia qualcosa del tipo:

rosso : (verde,giallo,...)
verde : (azzurro,...)

-dopo che hai trovato il rettangolo di partenza (quindi con il colore che non ha intersezioni), rimuovi quel colore dai valori degli items del tuo dizionario (se presente)
-a quel punto ci sarà un nuovo colore nel dizionario che non avrà più intersezioni (quello è il penultimo disegnato)
-lo aggiungi al tuo ordine e rimuovi il valore degli altri items
-continui così fino alla fine
-a quel punto, per l'ordine corretto, ti basterà leggere al contrario i valori che hai trovato.
lwcs (1380 points)
4 15 26
answered Dec 2, 2020 by lwcs (1,380 points)
Se riscontri un problema di IndexError c è qualcosa che non va nella lettura di una lista,del tipo che stai scansionando la lista attraverso posizioni,e verso la fine della scansione la pos-ennesima non esiste nella lista: IndexError.

Mentre se il problema è un KeyError, se ad esempio stai pescando da un dizionario avente come key il colore di un rettangolo,e peschi queste keys (pixel) da un altra parte,se nel dizionario non hai il pixel mancante: KeyError;in questo caso il problema probabilmente risiede nella parte del codice dove hai creato il dizionario che utilizzi per pescare i colori.

Se non ti da nessuno di questi errori e ti sei accorto che manca un rettangolo nell ' ultima lista di cui parli alla fine,vai a dare un occhiata su come viene generata quella lista.Prova a farci un debug ad esempio.E' probabile che tramite qualche istruzione che hai messo non consideri magari i casi estremi tipo: rettangolo senza nessun rettangolo sopra,oppure rettangolo che non abbia nessuno sotto.