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

Do you need help?

Leaderbord HW2

N
Nando (340 points)
4 8 9
in HW2 by (340 points)
Salve a tutti, più o meno mi sembra di aver capito come svolgere quest'hw e credo di essere ad un buon punto per quanto riguarda il codice e la sua efficienza nonostante non abbia ancora fatto nessun test. L'unico "problema" che sto riscontrando è sul come creare la leaderbord finale.

In poche parole non so come, dopo aver assegnato ad ogni giocatore i suoi scontri vinti, come faccio a riordinare la lista tenendo conto del fatto che la leaderbord finale mantenga l'id  del giocatore (ossia l'indice) e non gli effettivi punti (o scontri vinti, che dir si voglia). Ho chiaramente un modo per ordinare la lista dal valore maggiore al minore ma mi chiedevo se poteste aiutarmi a capire come ritornare appunto i vari id dei giocatori anziché i loro score.

Grazie in anticipo a tutti coloro che saranno così gentili da darmi una mano.
526 views

2 Answers

Exyss (21510 points)
1 2 79
by (21.5k points)
edited by
Un modo molto comodo per poter fare quello che cerchi sarebbe creare un dizionario utilizzando come chiavi i vari index dei "giocatori" e come valori associati ad ogni chiave il numero di vittorie conseguite da ogni giocatore (ad esempio la lista contenente solo le vittorie [15, 0, 2] verrebbe trasformata in {0: 15, 1: 0, 2:2}).

Successivamente ti basterebbe riordinare il dizionario in base al valore associato ad ogni chiave (una googlata veloce dovrebbe aiutarti) per poi estrarre tramite il metodo .keys() la lista delle chiavi del dizionario post-riordinamento (quindi riprendendo l'esempio di prima {0: 15, 1: 0, 2: 2} -> riordino in base ai valori -> {0: 15, 2: 2, 1: 0} -> estraggo la lista delle chiavi -> [0, 2, 1])
N
Nando (340 points)
4 8 9
by (340 points)
Grazie mille! Mi sembra veramente un ottimo metodo e molto veloce grazie all'utilizzo del dizionario, quindi credo che userò questo.
N
Nando (340 points)
4 8 9
by (340 points)
Dai un'occhiata alla funzione zip, non ho ancora provato ma dovrebbe essere più performante rispetto al metodo del dizionario.
Exyss (21510 points)
1 2 79
by (21.5k points)
Si è possibile utilizzare anche la funzione zip come "escamotage", anche se nei test che ho fatto cambia di molto poco il risultato visto che il riordinamento è l'ultima operazione prevista dal programma (solitamente almeno, poi ognuno trova il suo modo)
A
AlessandroBavaro (10660 points)
5 8 24
by (10.7k points)

Salve Nando, io ho prima riordinato le stringhe dei partecipanti alla sfida in base al punteggio in una seconda lista e poi con un doppio ciclo for utilizzando gli indici ho rinominato i singoli partecipanti con la loro posizione precedente con un if ovvero: se il giocatore tra i partecipanti è uguale alla al giocatore della seconda lista riordinata allora il giocatore nella lista riordinata e uguale alla posizione del giocatore dei partecipanti.

[acc,ccc,caa] riordinata per i punteggi e [ccc,acc,caa]

ora confronti le due liste il giocatore ccc e in posizione 1 nella lista partecipanti quindi ccc nella seconda lista diventa uno

[1,acc,caa] e via cosi.

Spero di essere stato chiaro e di esserti stato utile.

Ad ogni modo questo e come ho risolto io

N
Nando (340 points)
4 8 9
by (340 points)
Si si, tutto chiaro, grazie dell'aiuto!