Salve a tutti, da assoluta principiante in programmazione ho svolto l'homework 2 trovando una soluzione che ritorna i valori corretti per l'esempio della consegna e per la maggior parte dei test, tranne due in particolare per cui i risultati sono errati (mentre gli ultimi test scadono in time-out). Anche ricontrollando il codice più volte non capisco quale errore possa "passare inosservato" per tanti test e poi influenzare i risultati in pochi altri.
In generale, ho strutturato l'algoritmo con due cicli for innestati per scorrere ordinatamente i turni e i giocatori della partita.
La condizione iniziale all'interno dei for è che la lunghezza della lista corrispondente al giocatore in questione sia maggiore del turno corrente (in modo da evitare "index out of range" per i giocatori che non giocano l'ultimo turno), poi ci sono due possibilità:
- se ci sono abbastanza lettere nel "mazzo" per rimpiazzare quelle utilizzate per formare la parola corrente, num_letters decrementa di conseguenza e salvo la "mano" del giocatore come dim_hand in una lista apposita
- se num_letters non è sufficiente, la mano del giocatore corrisponde a dim_hand meno le lettere spese (considerando comunque le lettere ancora disponibili nel mazzo) e num_letters viene azzerato
Infine, calcolo i risultati sottraendo al "punteggio lordo"(senza penalità) di ogni giocatore (calcolato con una funzione ausiliaria) le penalità corrispondenti ai relativi valori delle "mani".
Qualcuno può darmi dei consigli su dove cercare il problema che mi impedisce di passare tutti i test?
RISOLTO:
invece che decrementare la "mano" del giocatore ad ogni turno, aggiornavo il valore della lista (senza considerare quindi i risultati del turno precedente) ':D
In generale, ho strutturato l'algoritmo con due cicli for innestati per scorrere ordinatamente i turni e i giocatori della partita.
La condizione iniziale all'interno dei for è che la lunghezza della lista corrispondente al giocatore in questione sia maggiore del turno corrente (in modo da evitare "index out of range" per i giocatori che non giocano l'ultimo turno), poi ci sono due possibilità:
- se ci sono abbastanza lettere nel "mazzo" per rimpiazzare quelle utilizzate per formare la parola corrente, num_letters decrementa di conseguenza e salvo la "mano" del giocatore come dim_hand in una lista apposita
- se num_letters non è sufficiente, la mano del giocatore corrisponde a dim_hand meno le lettere spese (considerando comunque le lettere ancora disponibili nel mazzo) e num_letters viene azzerato
Infine, calcolo i risultati sottraendo al "punteggio lordo"(senza penalità) di ogni giocatore (calcolato con una funzione ausiliaria) le penalità corrispondenti ai relativi valori delle "mani".
Qualcuno può darmi dei consigli su dove cercare il problema che mi impedisce di passare tutti i test?
RISOLTO:
invece che decrementare la "mano" del giocatore ad ogni turno, aggiornavo il valore della lista (senza considerare quindi i risultati del turno precedente) ':D