HW1bis es. 1

A
AFulvio (220 points)
0 2 5
asked Feb 19, 2019 in HW1bis by AFulvio (220 points)
recategorized Mar 12, 2019 by andrea.sterbini

Ciao a tutti, ho impostato l'esercizio nel seguente modo: ho ricavato la lista da n tramite una list comprehensions, con un while itero fino a quando la lunghezza della lista è uguale a k. Nel while elimino dalla lista l'elemento in posizione c per poi modificare l'ordine della lista stessa con "lst = lst[c:] + lst[0:c]". Ho capito che il problema dell'esercizio sta nel momento in cui la lunghezza della lista diventa minore o uguale di c, ma non riesco a capire come impostare le condizioni per far si che il conteggio riparta dall'inizio delle lista. Ho letto più volte domande e risposte relative a questo esercizio ma non ne sono arrivato a capo, se qualcuno ha pazienza per spiegarmi il "funzionamento" di questo esercizio lo ringrazio in anticipo !

316 views
closed with note: Errore nel metodo utilizzato

1 Answer

_andrea_ (45670 points)
2 39 297
answered Feb 20, 2019 by _andrea_ (45,670 points)
Io l'ho fatto ma vado in timeout dal settimo test. Ho usato anche io la list comprehension e poi ho fatto il ciclo finché la len è diversa da k. All'interno uso un contatore che parte da 0 e incrementa di c ogni volta, e sempre dopo averlo incrementato rimuovo l'elemento della lista in quella posizione. Per farlo ripartire da 0 usa il modulo
A
AFulvio (220 points)
0 2 5
commented Feb 20, 2019 by AFulvio (220 points)
Scusami ma non ho capito, crei una variabile che parte da 0 e poi una volta nel ciclo la incrementi di c ? E in che senso la fai ripartire da 0 con il modulo ?
_andrea_ (45670 points)
2 39 297
commented Feb 20, 2019 by _andrea_ (45,670 points)
Rileggendo quelll che hai scritto mi sembra che hai sbagliato proprio il procedimento. Non devi togliere l'elemento in posizione c, ma partire dalla prima posizione e andare avanti di c posizioni elimiminando quell'elemento. Quindi se c=5, inizi da 0 e fai 0+5, elimini quindi la posizione 5. Poi fai 5+5, elimini la posizione 10, e così via. Se la posizione però esce fuori dalla lista devi tornare a 0 e fare il resto dei movimenti
A
AFulvio (220 points)
0 2 5
commented Feb 20, 2019 by AFulvio (220 points)
Scusami per le molte domande ma sono un principiante in materia, il ragionamento del tuo ultimo commento l'ho capito e per farti arrivare ai miei dubbi ti faccio un esempio: nel test n°9 arrivano in input n=100000 c=200000 e k=5, con il tuo metodo all'inizio del ciclo il contatore diventa 200000 e quindi già fuori indice nella lista 'n'. Come faccio a far tornare il conteggio da 100000 a 0 già nel primo passaggio ?
_andrea_ (45670 points)
2 39 297
commented Feb 20, 2019 by _andrea_ (45,670 points)
Come ho detto prima, col modulo. Il modulo è il resto della divisione intera. Quindi se parti da p=0, c=5 e n=7, fai prima p=0+5, lo togli e la lunghezza diventa n=6. Poi fai p=5+5, che però arriva a 10. Allora fai p%n che fa 4, cioè proprio la posizione dove ti dovresti trovare
A
AFulvio (220 points)
0 2 5
commented Feb 20, 2019 by AFulvio (220 points)
edited Feb 20, 2019 by AFulvio

Perfetto ho capito tutto, grazie per l'aiuto 

AGGIORNAMENTO: il codice sono riuscito a scriverlo correttamente ora però non passo gli ultimi 3 test per il tempo...

_andrea_ (45670 points)
2 39 297
commented Feb 20, 2019 by _andrea_ (45,670 points)
eh lo so, su questo non so aiutarti purtroppo
A
AFulvio (220 points)
0 2 5
commented Mar 6, 2019 by AFulvio (220 points)
edited Mar 6, 2019 by AFulvio
Risolto ! Il problema era nel metodo remove, che impiega molto più tempo di del !