Homework 1 - Esercizio 1 - Come ottimizzare?

f.cocci (650 points)
1 13 17
asked Oct 25, 2018 in Es1 by f.cocci (650 points)
La mia soluzione passa tutti i test all'interno di test01.py con esito positivo.

Purtroppo non ho lo stesso risultato applicando il time out di un secondo.

Non so se questo e' dipeso dall'utilizzo di for annidati (di cui non riesco a farne a meno pero...), oppure il modo in cui cerco il valore massimo all'interno di voti per creare la lista delle soglie su cui iterare.

Oltre queste due cose non so su cos'altro migliorare nel il mio codice.

Avete qualche suggerimento?

Attualmente la mia funzione ci mette 9 secondi :-(.

Grazie in anticipo, F.
239 views

2 Answers

Best answer
A
AlessandroB (1100 points)
0 7 13
answered Oct 25, 2018 by AlessandroB (1,100 points)
selected Oct 31, 2018 by f.cocci
Puoi provare a contare quanti voti sono presenti all'interno della lista, poi ordinando la lista controlli il voto minimo e se il voto minimo all'interno della lista è maggiore della soglia allora vuol dire che tutte le persone lo hanno passato, mentre se ne trovi  che  il voto minimo è minore della soglia significa che una persona non l'ha passato quindi nella lista deve essere inserito il totale meno uno e aggiorni il minimo.
f.cocci (650 points)
1 13 17
commented Oct 25, 2018 by f.cocci (650 points)
quindi se ho capito bene, in questa maniera mi risparmierei un for, corretto.
Provo a lavorarci, ho provato a mettere giù qualcosa, ma al momento mi sono solo complicato la vita come sintassi, ma e' un mio problema ovviamente :-).
Non ho ben capito cosa fare per aggiornare il minimo cmq...
A
AlessandroB (1100 points)
0 7 13
commented Oct 25, 2018 by AlessandroB (1,100 points)
Semplicemente se sai che il numero minimo è minore della soglia allora significa che il nuovo minimo sarà l'elemento successivo della lista, quindi se l'elemento ha indice i il successivo ha indice i+1.
f.cocci (650 points)
1 13 17
commented Oct 26, 2018 by f.cocci (650 points)
MI dispiace ho provato a sfruttare questa logica ma mi sono incartato purtroppo. :-(
f.cocci (650 points)
1 13 17
commented Oct 31, 2018 by f.cocci (650 points)
Alla fine ho sottomesso l'esercizio e devo dire che tutto sommato, sulla macchina virtuale il risultato e' andato decisamente meglio in termini di timeout.
Non ho passato tutto ma in generale per me che non ho mai programmato e' un buon risultato. addirittura ho prese un bonus sull'intricatezza sull'esercizio 2 che mi ha alzato la media generale a 25.
Spero col peer to peer assessment di migliorare ulteriormente.
Grazie di tutti, F.
G
Gdn98 (11600 points)
1 34 101
answered Oct 25, 2018 by Gdn98 (11,600 points)
Potresti ordinare la lista di partenza e prendere l'ultimo elemento, in questo modo sapresti il voto massimo su cui fare le tue iterazioni senza troppo spreco di tempo
f.cocci (650 points)
1 13 17
commented Oct 25, 2018 by f.cocci (650 points)
Ci ho provato col pop ma il risultato non cambia...
Una volta preso il voto massimo io mi creo una lista soglie.
Per ognuno degli elementi nella lista soglie inizializzo un contatore a 0 e per ogni voto nella lista voti ricevuta in pasto dalla funzione es1 se il voto e' maggiore della sella soglia presa in esame dal primo ciclo, mi incrementa il contatore, quando ha finito mi aggiunge in append il valore del contatore al mio risultato e poi ricomincia da capo con l'altra soglia, risettando il contatore a 0. Sembra abbastanza pulito ma e' chiaro che non lo e' :-D
D
Deacoon (9100 points)
3 33 53
commented Dec 5, 2018 by Deacoon (9,100 points)
list comprenshion