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

Do you need help?

HW2 Fallimento test

a
arianna_paolini (1080 points)
1 2 3
in HW2 obbligatorio by (1.1k points)
closed by
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
403 views
closed with the note: Risolto!

5 Answers

R
Raffaele (3850 points)
16 27 49
by (3.9k points)
Ti consiglio di guardare i test che ti danno problemi che si trovano nei file json. Poi esegui il programma con in input i dati del test e sfrutta la funzione print() per ricontrollare che le variabili del tuo codice assumono sempre il valore desiderato.

Controlla attentamente tutti i punti in cui modifichi la lista di output.

Vedi anche di quanti sbagli il risultato, (normalmente durante la stessa esecuzione dei test c'è scritto il valore richiesto e quello di output).

Spero di esserti stato di aiuto
p
p.carlesi (440 points)
0 2 4
by (440 points)
Ciao!
La tua linea d'azione sembra ragionevole...
per i tempi forse ti converrebbe, dato che le giocate le devi scorrere tutte comunque, fare tutti i conti parziali in un solo "loop" (per un miglioramento poi può convenire separare le due operazioni di nuovo ma questo esula dall'argomento).

Per quanto riguarda l'errore in alcuni test, rifletti sulle condizioni speciali, perché il diavolo sta nei dettagli, dicono; ci sono tre punti dove bisogna stare attenti qui: all'inizio, ma non credo, quando finiscono le tesserine del monte, e alla fine quando non tutti i giocatori fanno l'ultima mano.  Potresti fare in modo che tutti completino il turno, ad esempio!
alessio. (2780 points)
2 6 14
by (2.8k points)
Anch'io ho avuto un problema simile al tuo.Nel mio caso l'errore stava nell'ordine in cui controllavo se num_letters fosse uguale,minore o maggiore di 0,è bastato invertire un if con un altro e i risultati erano giusti.Controlla se qualche caso sfugge alle istruzioni nei for.Purtroppo questi errori sono molto subdoli
Marco Freddi (1420 points)
1 2 16
by (1.4k points)

Leggendo che dici "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"", mi viene il dubbio che tu moltiplichi il "valore dele mani" * 3, mentre invece le penalità sono semplicemente il numero delle lettere rimaste in mano * 3. Potrebbe essere la ragione per cui partono alcuni test (dato che molte lettere valgono 1).

a
arianna_paolini (1080 points)
1 2 3
by (1.1k points)
Purtroppo non è quello, forse mi sono espressa male, con "valori delle mani" intendo il numero di lettere che hanno in mano
giordano_sannino (13650 points)
7 16 81
by (13.7k points)
Strano.. Prova a pensare basandosi sui risultsti contrastanti!

Esempio: sbagli di 3? Magari togli una lettera in meno