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

Do you need help?

Notice Board

HM 2 es.2 programma troppo lento

A
Adriano (940 points)
7 16 23
in Es2 by (940 points)
Salve a tutti!
Ho completato il secondo esercizio ma il programma riesce a passare solo i primi tre test prima di andare in timeout, impiegando comunque già parecchio tempo per il terzo test.
Dato che impiega appena qualche istante per printarmi tutte le funzioni tranne la penultima immagino che il problema sia quest'ultima. In pratica con un for scorro chiavi e valori dell'insieme dato(insi),( trasformato in un dizionario che ha già solo le chiavi che servono e con solo il primo valore per ogni chiave ), e con un altro for itero su ogni valore di questo dizionario. Se il valore è presente come chiave nel dizionario dato(fcompiti)  aggiungo il suo valore a quello precedente e continuo fino a trovare tutti i valori.
Anche provando altri approcci, almeno un for che mi iteri sul dizionario dato(fcompiti) e uno sull'insieme dato(insi) li devo mettere(o no?).
Per curiosità ho anche provato a creare una semplice funzione che, itera sugli elementi dell'insieme(insi) e mi conta +1 se l'elemento è tra le chiavi del dizionario(fcompiti) ma impiega comunque diversi minuti(non so quanti dato che l'ho sempre fermato prima). Se già una funzione semplice come questa impiega un eternità non capisco come riuscire a creare la funzione che mi serve in modo che agisca in tempi fattibili. Immagino di stare sbagliando completamente approccio ma non riesco a trovare un altro tipo di ragionamento. Dove sto sbagliando?
334 views
closed

1 Answer

Best answer
francesco.dev (33560 points)
21 51 129
by (33.6k points)
selected by

Ciao!

Ci sono vari consigli che potrei darti, ma ti do giusto piccoli accenni cosicché tu possa arrivarci da solo (darti la soluzione, o meglio, una delle soluzioni non è la cosa migliore né per te, né per me, né per il regolamento di questo forum).
Detto questo:

  • Hai provato a fare un ciclo ancor prima in cui vedi se effettivamente l'elemento che stai cercando (di insi) sia realmente presente nel dizionario?? (coff coff.. "in" non ti dice niente? :)  )
  • Hai provato a restringere il numero di controlli e a renderli più efficienti possibili? E' probabile che tu faccia diversi controlli che potrebbero essere sostituiti da un numero minore degli stessi;
  • Hai provato a ragionare sulla struttura che stai utilizzando??

Questi sono piccoli e utili consigli rivolti a tutti! Spero che vi aiutino a concentrarvi un po' di più e a farvi pensare a nuove idee!
Ripeto: non darò chiaro e tondo la soluzione, ma vi consiglio il ragionamento alla base :)

Buona serata,
- Francesco Pio Scognamiglio

A
Adriano (940 points)
7 16 23
by (940 points)
"No" alla prima domanda(avevo già controllato che i valori fossero presenti nel dizionario) e "sì" per le altre due. Infatti la struttura era giusta ma c'era un altro problema un pò lungo da spiegare. Comunque non era mia intenzione chiedere "la soluzione", anzi volevo giusto qualche dritta per farmi venire in mente altre possibili strade. In ogni caso grazie mille per la risposta!
francesco.dev (33560 points)
21 51 129
by (33.6k points)
Di niente! Sono sempre disponibile per aiutare
Buona giornata Adriano :)