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

Do you need help?

Ottimizzare ese1

Sickboy (28240 points)
7 25 68
in Es1 by (28.2k points)
Non saprei proprio come ottimizzare il mio codice per renderlo più veloce, per ora ho una decina di righe di codice e nel complesso 2 for e 1 if, solo che col timeout l'ultimo test non lo passa, qualche consiglio??
888 views
closed

3 Answers

Best answer
u
ugo.monticone (1220 points)
0 3 13
by (1.2k points)
selected by
Avevo il tuo stesso problema. poi ho ragionato sull'ordine dei cicli della mia soluzione ed ho riscontrato che due cicli annidati (a indici x e y, per esempio) si traducono in x*y ripetizioni. Analizzando il problema da un altro punto di vista, ho capito che potevo ridurre il tutto a cicli di ordine 1, cioè non annidati e sono rientrato nei tempi stabiliti!
DRDLCN (8070 points)
27 68 104
by (8.1k points)
alessioclemente (19640 points)
16 67 153
by (19.6k points)
In pratica hai usato 2 cicli separati?
u
ugo.monticone (1220 points)
0 3 13
by (1.2k points)
mi sono chiesto come potevo ottenere il risultato richiesto riducendo al minimo lo sforzo. mi sono accorto che, per fortuna, ci sono molti modi diversi di risolvere l'esercizio e tutti giusti. Questo è vero fino a quando non ti ritrovi a dover fare i conti col cronometro: allora mi sono detto:"come posso calcolare il numero di ammessi in base al voto?" Ho rigirato la domanda fino a farmela andare bene. se trovi i due cicli giusti, annidati o no, stanno nei tempi!!
DRDLCN (8070 points)
27 68 104
by (8.1k points)
I cicli for sono annidati?
Sickboy (28240 points)
7 25 68
by (28.2k points)
In pratica si anche se quello più interno l ho messo in una funzione
Xriuk (13590 points)
6 24 116
by (13.6k points)
Se sono annidati ci sono comunque parecchie iterazioni
Sickboy (28240 points)
7 25 68
by (28.2k points)
Infatti chiedevo un consiglio per migliorare
Xriuk (13590 points)
6 24 116
by (13.6k points)
Il numero delle righe non conta, quello che cambia da un algoritmo a un altro è la logica, se il tuo non passa il timeout vuol dire che stai facendo qualche operazione "pesante" o ripetitiva. Non sapendo il tuo codice, il mio consoglio è quello di controllare se richiami qualche funzione di troppo nei tuoi cicli oppure se puoi saltare qualche iterazione (ad esempio far avanzare un contatore in un determinato modo)
Sickboy (28240 points)
7 25 68
by (28.2k points)
Non richiamo funzioni di troppo, e gli indici partono già da una posizione avanti
N
Nikolay (1250 points)
3 21 30
by (1.3k points)
Sto facendo es1 del homework1. Per ora la mia funzione non passa nessun test. Per ora vorrei capire se sto procedendo nel modo giusto. Ho scaricato homework1.zip. Dopo ho installato i plugin necessari, dopo di che ho implementato la funzione es1(voti). Compilatore non passa nessun, il primo errore e' questo test_2_valori_soli_grandi_1__300__800_ (__main__.Test)
tuple() -> empty tuple ... FAIL. Prima domanda e' questa : devo cimplementare funzione es1(voti) che restituisce il numero degli studenti che abbiano preso un certo voto. Giusto?
Xriuk (13590 points)
6 24 116
by (13.6k points)
Se hai un problema ti consiglio di fare una domanda separata.
Comunque no, la tua funzione deve restituire una lista e per ogni voto da 0 al voto massimo il numero di studenti con un voto maggiore o uguale al voto.
N
Nikolay (1250 points)
3 21 30
by (1.3k points)
Grazie, Roman. In effetti ho sbagilato io a fare domanda, cioe la funzione deve restituire una lista che va da 0 al voto massimo(ad esempio da 0 a 5), e in ogni posizione(che rappresenta il voto) il numero degli studenti ammessi. Un esempio se ho una lista dei voti ls = [1,1,3,3,3,5,5,5,5] mi deve restituire studenti_ammessi = [0,2,0,3,0,4]. Giusto?
Xriuk (13590 points)
6 24 116
by (13.6k points)
In questo caso ti dovrebbe restituire [9, 9, 7, 7, 4, 4] (i voti che non ci sono fra gli studenti vanno considerati comunque), e non assumere che la lista dei voti sia già ordinata in partenza
N
Nikolay (1250 points)
3 21 30
by (1.3k points)
Grazie, Roman, sei stato molto di aiuto!
D
Deacoon (9100 points)
11 34 53
by (9.1k points)
togli i for annidati
Sickboy (28240 points)
7 25 68
by (28.2k points)
Che tempismo