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

Do you need help?

come costruire albero in es 2 hw4bis

Light (5130 points)
59 181 229
in Es2 by (5.1k points)
edited by
sto piano piano cercando l'idea ma ancora ho tanta confusione in testa...la mia domanda è come faccio mettere un "|" sopra un numero in una stringa per farlo diventare es. |

                      24?(l'ho messo una riga giu ma spero che rende l'idea) come posso farlo per costruire in generale attraverso spazi trattini la stringa? posso farlo attraverso classi? devo creare una lista di liste per muovermi? davvero non so proprio come fare...mi sento perso zzz
652 views
closed

1 Answer

Best answer
_andrea_ (45670 points)
13 42 297
by (45.7k points)
selected by
non so se ancora ti serve ma ho letto il testo e penso che il modo migliore sia usare liste di stringhe, dove ogni stringa rappresenta una riga. esempio se crei la lista della foglia 90, avrai ['90'], se la foglia è figlia di 80, che ha anche un figlio 70, avrai le foglie 90 (detta prima) e 70: ['70']. ora devi unirle ottenendo ['70  90'] e sopra a questa riga ci metti quella con i collegamenti verticali e ancora sopra quella coi collegamenti orizzontali, e alla fine quella col numero. ottieni prima ['|   | ','70  90'] con i collegamenti verticali, poi [' _|_  ','|   | ','70  90'] aggiungendo quello orizzontali, e alla fine

['  80  ',' _|_  ','|   | ','70  90']. se controlli questo è proprio l'albero che corrisponde a 80 con figli 70 e 90
Light (5130 points)
59 181 229
by (5.1k points)
si comunque grazie mille mi serviva ancora...stavo cercando infatti di lavorare cosi pero poi mi è sorto un dubbio...io alla fine devo dare in output una stringa e non una lista quindi questo fatto mi ha non poco frenato...
_andrea_ (45670 points)
13 42 297
by (45.7k points)
alla fine basta che unisci tutte le stringhe con uno '\n' e basta. prima però pensa a costruirti le liste, ti assicuro che ad unire le righe ci vuole un'istruzione sola
Light (5130 points)
59 181 229
by (5.1k points)
scusami se ti rompo tanto ma non ho capito bene quando intendi di costruirti le liste? te intendi che devo fare tante "semplici" ovvero faccio prima una lista in cui ho un padre e i suoi 2 figli foglie poi un altra in cui ho i  suoi esempio 3 figli ecc e cosi via anche con i padri di padri ma in cui non faccio subito l'unione ma semplicemente faccio alberi "semplici" in cui padre e figli e cosi via?
_andrea_ (45670 points)
13 42 297
by (45.7k points)
edited by
la ricorsione funziona così: prima chiami la funzione su tutti i padri, poi appena arrivi a una foglia (il caso che ti blocca) ritorni la lista con solo la riga della foglia, come il 90 e 70 dell'esempio. ora la ricorsione fa da sé, nel senso che ti devi scrivere solo come legare le righe insieme, ma il resto viene dato per scontato. se tu hai l'albero

  80  

 _|_  

|     |

70  90

la ricorsione chiamata su 80 crea prima le foglie ['90'] e ['70'], poi le unisce seguendo i procedimenti che ti ho detto, che ovviamente devi scrivere tu. la funzione ricorsiva sarà quindi di questo tipo:

se ho una foglia ritorno la lista con dentro la foglia

se ho dei figli unisco prima le righe dei figli, ottenendo ad esempio ['70  90'], poi aggiungo le righe verticali, per farlo aggiungo una riga alla lista di righe che sarà così ['|     | ','70  90'], poi ci metti un'altra riga che ha i collegamenti orizzontali e quello sotto al padre, e poi ci metti il padre

ora hai ['  80  ',' _|_  ','|   | ','70  90'] che corrisponde proprio all'albero 80. ora immagina che l'albero sia così

   10     

 __|__    

|         |   

20      30

|       _|_

40   |     |

       50  60

tu chiami la ricorsione su 10 che la chiama su 20 e su 30. il 20 ottiene la foglia 40 e la completa così ['20','| ','40']. il 30 invece ottiene le figlie 50 e 60 e le completa così

['  30  ', _|_  ','|   | ','50  60']. poi grazie alla ricorsione il 10 ottiene entrambe le liste, e deve unirle ottenendo quindi

['   10     ',' __|__    ','|     |   ','20    30  ','|    _|_  ','40  |   | ','    50  60']. alla fine devi solo unirle e diventano '   10     \n __|__    \n|     |   \n20    30  \n|    _|_  \n40  |   | \n    50  60'
_andrea_ (45670 points)
13 42 297
by (45.7k points)
i criteri di unione tra righe e collegamenti vari sono scritti nella traccia
Light (5130 points)
59 181 229
by (5.1k points)
grazie  mille!
_andrea_ (45670 points)
13 42 297
by (45.7k points)
Ci sei riuscito?
Light (5130 points)
59 181 229
by (5.1k points)
ci sto lavorando ma è gia un'inizio; meglio di non aver in mente niente