[HW4] Consigli per il timeout?

s
stun100 (330 points)
1 2 3
asked Nov 17, 2020 in HW4 obbligatorio by stun100 (330 points)
Non riesco a passare 5 test per il timeout. Link screen risultati test : https://pasteboard.co/JAPjjpL.png

Vedo con il profiler che usa tanto tempo per trovare le es e le finali (uso una unica funzione per trovare entrambe). Qualcuno può darmi consigli per ridurre i tempi?
272 views

2 Answers

Best answer
g
giacomo_venturini (6680 points)
2 5 39
answered Nov 17, 2020 by giacomo_venturini (6,680 points)
selected Nov 18, 2020 by stun100
Sfrutta il più possibile metodi di libreria piuttosto che cicli, considera che per contare il numero di ES ti è sufficiente sapere se un carattere è vocale o consonante, non di quale vocale o consonante si tratta, e allo stesso modo se sai qual è la posizione dell'ultimo ES puoi recuperare la finale corrispondente senza dover ciclare tutti i caratteri.
s
stun100 (330 points)
1 2 3
commented Nov 17, 2020 by stun100 (330 points)
edited Nov 17, 2020 by stun100
Ma per sapere se è un carattere è una vocale o consonante non è necessario usare un ciclo?

Perche io ho utilizzato 3 for:

-un for per cicla per ogni riga del testo

-(al interno del primo for) un for per le es che controlla se il carattere è una vocale e allo stesso tempo il carattere successivo è una consonante e prende la posizione dell'ultima vocale del penultimo es

-(al interno del primo for) un for per le finali. Uso la posizione dell'ultima vocale del penultimo es, per sottrarlo dalla lunghezza della riga totale così ottengo la lunghezza della finale.

 Poi uso la lunghezza per sapere quante volte devo ciclare per aggiungere i caratteri delle finali in una lista. Alla fine uso join() per ottenere la finale
g
giacomo_venturini (6680 points)
2 5 39
commented Nov 17, 2020 by giacomo_venturini (6,680 points)
Se il verso fosse composto da 1 consonante e 1 vocale che si alternano ogni tot potresti sfruttare i metodi delle stringhe per contare, dividere e trovare l'ultima occorrenza di sottostringhe particolari, tutto questo senza dover scorrere i singoli caratteri (azione molto dispendiosa se questi iniziano a diventare parecchi, come accade in diversi test).
Tutto sta nel trovare il modo di ricondursi a questa situazione ottimale!
s
stun100 (330 points)
1 2 3
commented Nov 17, 2020 by stun100 (330 points)
Grazie per la risposta, domani proverò :)
s
stefano.fantauzzi (2260 points)
3 6 17
answered Nov 17, 2020 by stefano.fantauzzi (2,260 points)

Ciao,

vengo fresco fresco dalla stesura dei consigli per il PA laugh. Mi sembra giusto condividere anche qui sul forum.

Potresti provare a vedere il numero di elementi sonori in un verso come il numero dei gruppi di consonanti in esso presenti, eventualmente aumentato di 1 se il verso inizia con una vocale. Immagina di considerare tutte le vocali come se fossero un'unica vocale e poi prova a immaginare di splittare per la vocale scelta, che lista ottieni? Ovviamente in quest'ottica il finale di ogni verso sarà slice del verso a partire dall'indice dell'ultimo gruppo di consonanti o, se il verso è composto di sole vocali (improbabile ma non impossibile), sarà l'intero verso.

Spero che tu possa superare lo scoglio timeout