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

Do you need help?

come posso migliorare il mio codice?

Light (5130 points)
55 181 229
in HW1 opzionale by (5.1k points)
closed by
salve, ho scritto una funzione che mi fa superare 15 test su 16 e quando ho consegnato sul sito il messaggio di errore è :wallclock_time = 1.005 def __exit__(self, *args)= wallclock_time = round(time.time() - self.start, 3) if wallclock_time > self.timeout= > raise TimeoutError(f'Timeout! ({wallclock_time} > {self.timeout})') E testlib.TimeoutError= Timeout! (1.005 > 1) testlib.py=21= TimeoutError "; sicuro questo è un errore di timeout ma per 0,005 è possibile? come posso fare per migliorare il mio codice anche di pochissimo (se avete consigli anche senza dire come ho implementato il codice ma generali per migliorare ne sarei grato)

EDIT: grazie a tutti per i consigli! proverò cosi
610 views
closed with the note: ho ricevuto consigli utili

5 Answers

dolcetto_gommoso (2790 points)
4 6 18
by (2.8k points)
cercare di scrivere un codice semplice e evita di fare calcoli inutili, ad esempio se fai tanti calcoli simili crea una variabile con quest'ultimo all'interno... evita di usare troppi loop, quelli di solito rendono il programma più lento.... puoi inoltre cercare delle funzioni già esistenti che ti possano migliorare il codice, senza importare altre librerie ovvio :)

spero ti sia stato utile
Rametto (4910 points)
3 4 25
by (4.9k points)
prova a mettere nelle variabili i compiti che usi più spesso, come magari la lunghezza della lista, e prova anche a convertire in int senza usare il for
giordano_sannino (13650 points)
7 16 81
by (13.7k points)

Io per ridurre i tempi di esecuzione di un minino consiglio(quello che ho fatto io alla fine) di evitare i cicli for dove puoi, e se devi calcolarti un qualcosa che poi devi richiamare più volte(penso tutti abbiamo questa esigenza nel problema, non penso posso dire di più sull' HW), meglio calcolarlo una volta, metterlo in una variabile e riusarlo richiamando la variabile(a me ha risparmiato circa un decimo).

Attenzione però: Se sul tuo pc superi di poco il test non è detto che lo superi sulla macchina del prof! (soprattutto se il tuo pc è molto potente). 

Marco Freddi (1420 points)
1 2 16
by (1.4k points)
1,005 non è il tempo di esecuzione totale, 0,005 è il tempo che ci mette a sospendere il test, dato che è stato superato 1 secondo (massimo tempo previsto per ogni test).
Prova la funzione time.time() (da importare) per calcolare il tempo di esecuzione del tuo programma (il time.time() della fine - il time.time() dell'inizio).
Per migliorare comunque prova a non ripetere casting o ricalcolo di informazioni che potresti immagazzinare precedentemente in una variabile.
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Non avrei saputo dirlo meglio :-)
Loriv3 (7970 points)
13 21 84
by (8.0k points)
Come hanno già detto quei millisecondi in più sono dovuti al tempo di sospensione del test, però devi soprattutto cercare di migliorare il tempo generale di un bel po'perchè così puoi stare tranquillo sul fatto che giri bene anche sulla VM, ti consiglierei di fare un controllo sui cicli for dato che questi occupano parecchio del tempo a disposizione se riuscissi a toglierne qualcuno ridurresti di parecchio il tempo. Se hai usato il minimo di cicli disponibili puoi fare un controllo più accurato su singole variabili e casting in modo da ottimizzare meglio il tuo codice