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

Do you need help?

Aiuto con l'Hw2obb

L
LorenzoLaccone (1020 points)
6 7 10
in HW2 obbligatorio by (1.0k points)

Buongiorno a tutti,

E' da qualche giorno ormai che sono bloccato nella realizzazione dell'HW2obb. Ho effettuato una prima stesura e una prima consegna che tutto sommato mi va bene in quanto non supera solamente 2 test su 16 (esempio4 ed esempio5), ma vorrei comunque migliorare il mio codice per provare a fare di meglio.

Ho capito che solamente con le liste non si può riuscire a concludere nulla perché il problema sorge nel momento in cui vado a cercare l'indice dell'elemento da scambiare e ho capito che una soluzione possono i essere i dizionari o i set, il problema è che non capisco proprio come fare per impostare queste altre strutture dati in modo utile per migliorare il programma, ho fatto qualche prova ma riesco solo ad aumentare i tempi piuttosto che diminuirli.

Chiedo gentilmente, se qualcuno è riuscito a risolvere questo problema, di darmi qualche dritta concettuale su come impostare i dizionari o i set o qualche consiglio per riuscire a sbloccarmi e per poter andare avanti da solo.

Ringrazio in anticipo tutti coloro che proveranno a darmi qualche consiglio.

1.5k views
closed

4 Answers

Best answer
LucianoBlasetti (800 points)
2 2 6
by (800 points)
selected by
Prova ad impostare un dizionario in modo che per ciascun pilota tieni traccia di chi lo precede e di chi lo insegue. Non dovrai rimuovere fisicamente un pilota dal dizionario in caso di abbandono, ma agire solo sui "puntatori" del predecessore e del successore. Cosa analoga quando avviene un sorpasso, lavora solo sui puntatori. E alla fine sarai in grado di attraversare il grafo e ricostruire la classifica finale.
n
n.rossi (650 points)
3 4 9
by (650 points)
In questo modo per i sorpassi ok, ma per gli eliminati? Devo cambiare tutti i successivi e precedenti di chi precede l'eliminato quindi il valore dei dizionari per intenderci?
LucianoBlasetti (800 points)
2 2 6
by (800 points)
Mi sembra che sei sulla buona strada. (però quando dici "tutti" parliamo, nel caso di abbandono, di al massimo due piloti)
n
n.rossi (650 points)
3 4 9
by (650 points)
Quindi in sostanza se devo eliminare vado a toccare le posizioni di due piloti precendente e successivo , e quello in questione lo marco come eliminato , per i sorpassi ne devo toccare 4 perché cambiano i piloti adiacenti
LucianoBlasetti (800 points)
2 2 6
by (800 points)
Direi proprio di si. Considera sempre che meno cose si fanno e meglio è, quindi domandati sempre se è proprio necessario fare una qualche operazione, fra quelle che hai detto forse ce ne è una un po' superflua...
n
n.rossi (650 points)
3 4 9
by (650 points)
Calcola sul mio pc li passo tutti mentre sulla VM il test 5 mi fa 1.5 secondi ma deve essere inferiore quindi fallisce...per gli spostamenti sono obbligato a effettuare 3 modifiche...una sul pilota precedente una su quello successivo uno su quello dell'evento, posso eliminare qualche passaggio secondo voi ?
Simone.A (3750 points)
15 16 26
by (3.8k points)
Anche io non passo l'esempio 4 e 5
Luca_12_3 (580 points)
4 4 9
by (580 points)
prova a ragionare utilizzando 2 dizionari, ti risolvi alcuni problemi così
L
LorenzoLaccone (1020 points)
6 7 10
by (1.0k points)
Si mi era venuto in mente di usare un dizionario per tenere traccia dei successori di ogni concorrente e uno per tenere traccia dei precedenti di ogni concorrente.

Può essere corretto come ragionamento?

Grazie
s
simone.moriconi (280 points)
0 0 2
by (280 points)
Il ragionamento può andar bene, ma ad una chiave del dizionario si può associare un qualsiasi tipo di variabile... quindi si può tener traccia dei successori e dei precedenti  con un solo dizionario e risulta molto più semplice ricostruire la lista finale.
AlessandraIzzo (6010 points)
6 6 30
by (6.0k points)
edited by
Come mai è stata flaggata sia la domanda che la risposta di Luciano? Cosa c'è che non va? Se c'è qualcosa che non va perché non dirlo? ...

Comunque, prima di ciclare sugli eventi, potresti implementare una lista di dizionari* dove all'indice i della lista c'è un dizionario contenente l'indice del pilota precedente e quello del pilota successivo al pilota di id pari a i. In questo modo quando ciclerai sugli eventi potrai accedere direttamente agli id dei piloti adiacenti, senza dover usare il metodo index (per trovare prima la posizione del pilota sorpassato). Dovrebbe essere abbastanza facile a questo punto capire anche come evitare l'uso del metodo remove.

In sostanza una struttura dati in cui conosci le relazioni tra i piloti, ma non le posizioni esatte. Solo alla fine, costruirai una lista finale, da dare in output, in cui i piloti ancora in gara sono inseriti nella posizione che spetta loro.
Con questo approccio passerai facilmente il test 4, ma per il test 5 dovrai comunque stare attento ad evitare ogni piccola perdita di tempo.

* va bene anche una lista di mini-liste, ma una lista di dizionari è altrettanto efficiente e meglio leggibile
L
LorenzoLaccone (1020 points)
6 7 10
by (1.0k points)
Si mi chiedo anche io il motivo del flag, considerando che ho specificato un aiuto esclusivamente concettuale e che Luciano non ha mandato nessun frammento di codice.

Sarà stato qualcuno che voleva divertirsi cliccando le icone a suo piacimento? Nel caso invece sia stato un flag ritenuto opportuno invito il "responsabile" a indicare in un commento il motivo del suo flag di modo che io possa nel caso modificare la domanda o se necessario anche nasconderla.
AlessandraIzzo (6010 points)
6 6 30
by (6.0k points)

Infatti, come dicevo, perché non dire cos'è che non va?
Ieri avevo anche chiesto quanto fosse concesso aiutare i colleghi, e non sembra affatto che qui ci sia qualche violazione.
Quindi, o sarà qualcuno che non sa cosa è ammesso, o qualcuno che per interesse personale non vuole che ci si aiuti...

Sta a vedere che mi becco il flag pure io :)

a
a.pietroluongo (11250 points)
20 39 131
by (11.3k points)
Più la seconda.
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
SUGGERIMENTO: invece di dire direttamente il vostro algoritmo cercate di far pensare i vostri colleghi
Christian (15220 points)
3 4 77
by (15.2k points)
Curiosità.. mi sfugge una cosa qui su Q2A: come si vede una risposta/commento flaggato? Il post all'apparenza mi sembra come gli altri..

Comunque grazie Luciano, consiglio molto utile ;)
E
Edward (25950 points)
4 4 172
by (26.0k points)

Adesso è stato tolto/nascosto il flag. Prima si poteva vedere.

a
a.pietroluongo (11250 points)
20 39 131
by (11.3k points)
Forse lo ha tolto il prof.
Christian (15220 points)
3 4 77
by (15.2k points)
Grazie mille! Non riuscivo a capire
AlessandraIzzo (6010 points)
6 6 30
by (6.0k points)
Edward ha pure a disposizione screen di cose che non si possono più vedere!