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.

HW1bis es. 1

A
AFulvio (220 points)
2 2 5
in HW1bis by (220 points)
recategorized by

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 !

671 views
closed with the note: Errore nel metodo utilizzato

1 Answer

_andrea_ (45670 points)
11 42 297
by (45.7k 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)
2 2 5
by (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)
11 42 297
by (45.7k 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)
2 2 5
by (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)
11 42 297
by (45.7k 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)
2 2 5
by (220 points)
edited by

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)
11 42 297
by (45.7k points)
eh lo so, su questo non so aiutarti purtroppo
A
AFulvio (220 points)
2 2 5
by (220 points)
edited by
Risolto ! Il problema era nel metodo remove, che impiega molto più tempo di del !