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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Aiuto Gerarchia Rettangoli Hw8-Rec-Risolto---

DavdDs (690 points)
0 1 4
in HW8 by (690 points)
edited by

Risolto, di seguito spiegherò i miei errori:

1-Non avevo ben capito cosa fosse la ricorsione e speravo che sarei riuscito a risolverlo tramite metodi alternativi come un metodo che sfruttava la ricorrenza dei colori ogni tot spazi. 

2-Non avevo ben capito l'estrazione della lunghezza e della larghezza della Matrice tramite len(Matrix) e len(Matrix[0] credevo erroneamente che il primo fosse x e il secondo y quando in realtà uno é il numero di righe nella matrice e l' altro é la lunghezza delle righe.

3-Cattiva astrazione del problema e cattiva implementazione, l' astrazione é spesso piú importante della risoluzione logica.

4-Risoluzione in più funzioni, era molto meglio e lineare implementare tutto in un unica cosa.

5-Credevo che la ricorsione sovrascrivesse le sue stesse variabili quando in realtà usa ogni volta variabili locali e procede in modo ordinato e lineare.

Suggerimento: la soluzione è semplice, procedendo con l'astrazione é elementare e funziona, non bisogna sottovalutare la ricorsione che procede in modo lineare, può aiutare molto visualizzare(immaginare) la soluzione ricorsiva e poi implementarla secondo lo schema visualizzato.

Ciao a tutti, sto svolgendo l'hw 8 di recupero, sono arrivato a un punto morto, non so piú come proseguire e veramente avrei bisogno di una mano per cercare una soluzione almeno parziale.

Volevo sottoporvi, prima di chiedervi aiuto,  il mio metodo di risoluzione della seconda parte dell'esercizio, il mio codice usa la suddivisione della linea centrale dell'immagine per creare quattro rettangoli nel quale poi saranno identificate intersezioni (i lotti di terreno) e di esse sará calcolata l'area e il colore; questi valori saranno messi in una lista(di aree) e un dizionario (di aree e colori) ordino la lista contenente  le aree in  ordine decrescente infine uso i colori nel dizionario associati alle aree per creare l'immagine out assemblando tutte le matrici create dai singoli rettangoli.

Come metodo di soluziune é fin troppo banale, non mi sarei potuto aspettare di farla franca con cosí poco, tuttavia funzionava per i casi piú semplici anche se non andava per molti altri piú complessi , fullcase invece l'ho risolto sfruttando le distanze fisse che ci sono tra i pixels di colori uguali.

Come posso creare un algoritmo in grado di gestire l'immensa complessitá di questa parte dell'esercizio ? Quali sono le conoscenze richieste,forse transcuro qualcosa? Grazie in anticipo, qualunque aiuto é apprezzato.

1 Answer

p
p.lofaro (1210 points)
4 12 20
by (1.2k points)
Ciao Davide,

potresti risolvere in questo modo: apro l'immagine, trovo i confini dei lotti e poi identifico i 4 lotti (alto_sx, alto_dx, basso_sx, basso_dx) e mi torna, per ogni lotto, una lista di tuple (i pixel). A questo punto basta ritornare i lotti nell'ordine descritto nel testo dell'esercizio, niente di più! Io l'ho risolto in questa maniera.

Spero sia tutto chiaro.

Ciao

Paolo Lofaro
DavdDs (690 points)
0 1 4
by (690 points)
edited by
Mi hai fatto notare che ho commesso svariati errori di comprensione dell'esercizio, a seguito di una cattiva interpretazioni dei dati di test,  tuttavia mi  resta qualche incognita importante: come si puó dopo aver "scavato" e analizzato un lotto profondo tornare a analizzare il lotto principale? oltretutto evitando anche le  ripetizioni?

Un puzzle che mi ha tratto in inganno é small02 poiché nell'output  riporta prima il rettangolo in alto a sinistra  e dopo quello in basso a  sinistra anziché il contrario come aveva previsto la matrice di output prefissato come soluzione dell' esercizio sai spiegarmi come mai?

Grazie per la cortese risposta!
p
p.lofaro (1210 points)
4 12 20
by (1.2k points)
Ciao David,

" Un puzzle che mi ha tratto in inganno é small02 poiché nell'output riporta prima il rettangolo in alto a sinistra  e dopo quello in basso a  sinistra anziché il contrario sai spiegarmi come mai?  "

per rispondere a questa domanda devi focalizzarti su come la funzione restituisce il risultato dei lotti. Sei tu che decidi l'ordine di come questi lotti vengano analizzati. Io anche ho avuto questo tuo problema per diversi giorni ma poi ho risolto, è più semplice di quanto immagini.

La funzione che cerca i lotti deve ritornare 4 liste di pixel e l'ordine di questi lotti lo decidi te, chiaro ?

Ciao

Paolo Lofaro
DavdDs (690 points)
0 1 4
by (690 points)
Scusa, non mi sono spiegato bene l'esercizio ci chiede di riportare i rettangoli nel seguente ordine: rettangolo in basso a Destra, in basso a sinistra, in alto a destra, in alto a sinistra, schema che non viene rispettato dall'output proposto dall' immagine small02.gt.png siccome riporta prima il rettangolo in alto a sinistra e poi quello in basso a destra...Sto sbagliando un altra volta la compressione dell' esercizio?

E anche, ho capito che tipo di soluzione suggerisci, tuttavia questo metodo cozza immancabilmente contro un problema considerevole : come faccio, dopo che ho analizzato un rettangolo (o più rettangoli) in profondità, a tornare indietro e  scansionare il rettangolo "padre" alla ricerca del secondo rettangolo "figlio" adiacente a sinistra al primo scansionato?
p
p.lofaro (1210 points)
4 12 20
by (1.2k points)
quanti test fallisci e quali superi ? Nei test falliti che errori ricevi ?
DavdDs (690 points)
0 1 4
by (690 points)
Supero 12 test e ne fallisco undici.

Quelli che supero sono:-Tutti gli small, tutti i fullcase, tutti gli empty(ci mancherebbe), e un hard il numero 02 poiché la sua gerarchia dei colori  é legata all'area e quindi é semplice per il mio metodo risolverlo

Fallico invece: i medium, gli hard tranne il 2 e i rect

Gli Errori sono le differenze tra le di output e expected liste tutti

Tuttavia non ho punteggio sufficiente di voto ho solo 12.77, cosa abbastanza triste
p
p.lofaro (1210 points)
4 12 20
by (1.2k points)
Fallisci solamente nel restituire la lista dei lotti nell'ordine richiesto? Se fosse così devi riguardarti la funzione che restituisce i lotti e cambiare l'ordine con cui generi l'output.

Per come l'ho sviluppato io non ho calcolato ne area dei lotti ne altre misure, mi sono concentrato sui confini colorati e sulle quattro posizioni.

Saluti

Paolo Lofaro
DavdDs (690 points)
0 1 4
by (690 points)
Ciao, ho ancora un problema nell'implementazione dal quale non mi riesco a districare, al quale avevo giá accennato; mettiamo che ho appena completato lo scan dei quattro lotti di un sottolotto e devo passare al lotto adiacente superiore successivo, come posso fare a dire alla mia ricorsione di agire su un lotto superiore oltretutto tralasciando gli eventuali lotti giá processati.

Grazie in anticipo
B
B.R.Genovese (110 points)
0 0 1
by (110 points)
nel ritorno della funzione dovresti richiamare la funzione stessa 4 volte in modo da concatenare i risultati, ad ogni chiamata della funzione ovviamente inserirai un quadrante diverso del lotto, l'ordine di questa concatenazione determina anche l'ordine della gerarchia finale, quindi fai attenzione a quale quadrante inserisci per primo.
DavdDs (690 points)
0 1 4
by (690 points)
Si era giusta l'idea alla fine cel'ho fatta, avevo sottovalutato il potere della ricorsione credevo che i risultati si sarebberero ordinati in modo disordinato o che la ricorsione si sarebbe sovrascritta ogni volta, ho revisionato le funzioni e le ho compattate in una e ora passo tutto, grazie

Grazie per l'aiuto
DavdDs (690 points)
0 1 4
by (690 points)
Sono riuscito a risolvere, Grazie!