Calcolo punteggio HW2

s
stefanocali (1230 points)
1 2 9
asked Oct 24, 2020 in HW2 obbligatorio by stefanocali (1,230 points)
closed Oct 25, 2020 by andrea.sterbini
Buonasera, non ho capito bene come funziona il sistema del punteggio.
Vi spiego cosa ho fatto, ho creato una matrice trasposta, delle liste dei giocatori, così d'avere per ogni riga della matrice le parole dei quattro giocatori.
Appena scandisco le righe eseguo due funzioni, la prima mi calcolo il punteggio della parola, la seconda verifica se il num_letters è == 0 , > 0 o < , e da qui effettuo la sottrazione del punteggio.

Adesso arriva il problema, nel momento in cui la parola del giocatore è inferiore a num_letters, calcolo il punteggio ed effettuo la differenze tra (dim_hand - lunghezza parola + num_letters) e moltiplico per 3 il risultato lo sottraggo al punteggio del giocatore. Adesso se il num_letters è = 0 effettuo la differenza tra dim_hand e la lunghezza della parola e moltiplico per 3 anche qui il risultato lo sottraggo al punteggio del giocatore.

Credo che sia giusto come ragionamento. Ma i calcoli non tornano sempre giusti. Ho notato che se il giocatore numero 4 è quello che porta num_letters a 0, e se esiste esiste un ulteriore ciclo, devo effettuare la penalità dei 3 punti ai restanti giocatori.

Scusate la domanda, ma potete spiegarmi bene come funziona il sistema del punteggio.
Grazie

--------------------------------
Risolto, scusate, alla fine non so per quale motivo ma funziona, probabilmente si era buggato anaconda
227 views
closed with note: risolto

3 Answers

giordano_sannino (13650 points)
7 16 81
answered Oct 24, 2020 by giordano_sannino (13,650 points)
In pratica per quando il giocatore x finisce, gli altri non possono più mettere parole e gli verranno sottratti 3 punti per ogni lettera.

Il giocatore non finisce quando finiscono le parole dal sacchetto ma quando finisco quelle in mano!

Spero di essere stato chiaro, fammi sapere!
andrea.sterbini (172680 points)
511 927 1776
commented Oct 24, 2020 by andrea.sterbini (172,680 points)
edited Oct 24, 2020 by andrea.sterbini
OPS non dovrebbe essere così ... controllo
dovrebbe finire la gara quando non ci sono più tessere a disposizione AND un giocatore finisce le sue tessere

HMMM ho controllato e tutti i test mi sembra che soddisfino questa situazione
L
Lorenzo Spataro (2710 points)
0 0 12
answered Oct 24, 2020 by Lorenzo Spataro (2,710 points)
La differenza che fai tu, non dovresti farla quando la parola del giocatore utilizzata in quel turno è inferiore a num_letters poichè dovresti decrementare solo il totale delle lettere  con la lunghezza della parola giocata in questo caso, quell' operazione che hai descritto tu andrebbe fatta nel caso opposto.
Non ho ben capito come tieni conto dei punteggi dei giocatori, quello che ti consiglio di fare è calcolarti e salvarti in qualche modo i punteggi dei vari giocatori e le lettere che gli rimangono in mano, così dopo che hai calcolato i punteggi a fine partita per ogni lettera rimasta sottrai dai punteggi dei giocatori il numero di lettere * 3.
s
stefanocali (1230 points)
1 2 9
commented Oct 24, 2020 by stefanocali (1,230 points)
edited Oct 24, 2020 by stefanocali
Intanto Grazie a tutti per avermi risposto.

Ho modificato il codice ma ancora non va...
Allora io salvo i punteggi dei giocatori all'interno di diverse variabile una per giocatore, dopodichè con una seconda funzione, verifico che :

- num_letters == 0 allora sottraggo dim_hands alla lunghezza della parola e salvo la rimanenza nella variabile del giocatore.

- num_letters > lunghezza parola sottraggo a num_letters la lunghezza della parola

- num_letters < lunghezza parola allora sottraggo  (dim_hand - lunghezza parola) + num_letters dentro la rimanenza del giocatore, e inserismo num_letters = 0

finito questo eseguo il calcolo della penalizzazione del punteggio in base alla rimanenza.

Faccio un esempio, nel caso del test test_200_4_eng:

 Appena arrivo alla parola dfc del giocatore uno, ho che num_letters = 2 < della lunghezza della parola, allora salvo la rimanenza del giocatore così = (dim_hand - lunghezza parola) + num_letters
Adesso ho che al giocatore uno devo sottrarre al suo punteggio  3*rimanenza.

Il ciclo pero continua perchè c'è un altro giocatore che ha una parola, giocatore 2 parola = inde, dopo aver salvato il punteggio di questa parola, faccio (dim_hand - lunghezza parola) dentro la rimanenza del giocatore 2 che è uguale a 0.

Il ciclo però è finito perchè gli ultimi due giocatori non hanno parole, quindi a loro non sottraggo nessun punteggio.
La lista finale è [88, 89, 83, 84] di cui pero' agli ultimi 2 giocatori avrei dovuto sottrarre 3*num_letter (quando era == 2) per poter ottenere il risultato esatto.
1946981 (3070 points)
4 14 34
commented Oct 24, 2020 by 1946981 (3,070 points)
Anch'io ho lo stesso problema, non riesco a togliere i punti agli ultimi due giocatori.
Loriv3 (7970 points)
8 20 84
answered Oct 24, 2020 by Loriv3 (7,970 points)
Come ho risposto ad un altro ragazzo è più facile che la sottrazione degli elementi al numero di lettere nel mazzo o nella mano lo fai lettera per lettera. Se ad esempio hai una parola di 6 lettere toglierai 6 volte 1 al numero di lettere. L'ho trovata abbastanza efficiente dato che facendo così appena mi trovo in una situazione in cui non posso più prendere carte dal mazzo e devo toglierlo alla mano del giocatore ho una precisione maggiore