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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

Velocizzare algoritmo (soprattutto ricerca ES)

g
gullisa (1170 points)
9 26 32
in HW4 obbligatorio by (1.2k points)
Ciao a tutti,

il mio algoritmo per il HW4 è parecchio snello e molto lineare. Passa tutti i test per correttezza, ma non riesco ad abbassare la soglia per stare sotto il timeout negli ultimi 2 test.

Il problema sembra essere il tempo impiegato dalla funzione che spezza i versi in ES. Ho provato di tutto (map, filter, list comprehension etc...) e benchè ora la funzione sia stata ridotta a una list comprehension e una sola riga di codice ho sempre il problema del timeout. Quello che fa la mia funzione per la ricerca degli ES è:

Prende in input una stringa, cicla su una stringa in base a due indici sfasati e verifica la loro differenza in termini di valori booleani: in base a tale condizione aggiunge uno spazio dopo la lettera, altrimenti la semplice lettera, ritorna la lista degli ES come richiesto.

Consigli per velocizzare?

Grazie
256 views
closed

1 Answer

Best answer
twgever (17470 points)
8 29 105
by (17.5k points)
selected by
In che senso due indici sfasati? e in che senso aggiunge uno spazio dopo la lettera?

Un'idea così a freddo, è che magari l'aggiunta dello spazio dopo la lettera ti porta via un sacco di tempo. Non è chiaro, a cosa lo aggiungi, ad una nuova stringa che avrà tutti gli ES separati da uno spazio?
g
gullisa (1170 points)
9 26 32
by (1.2k points)
Li aggiunge a una lista i cui elementi sono le stringhe degli ES (compresi di spazi), poi riconverto la lista in stringa e separo in base agli spazi inseriti ottenendo la lista degli ES. Gli indici sfasati sono semplicemente elementi della stringa, ma a posizioni sfasate di 1...
twgever (17470 points)
8 29 105
by (17.5k points)
ti fai un sacco di passaggi inutili secondo me in questa maniera. ti salvi migliaia di ES che ti servono solo per contare, quando ti basterebbe semplicemente incrementare un contatore, invece di scrivere uno spazio, ad esempio.

Invece di fare un algoritmo che ti riscrive tutto il testo e quando si verifica una condizione aggiunge uno spazio, prova a fare un algoritmo che NON ti riscrive tutto il testo (ti servono solo le finali), e che aumenti semplicemente un contatore quando si verifica una condizione. ha senso?
g
gullisa (1170 points)
9 26 32
by (1.2k points)
Grazie, ci faccio una pensata!