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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

"test segreti" per l'HW2

9
9Andrea9 (12340 points)
12 32 56
in HW2 obbligatorio by (12.3k points)
recategorized by
Salve a tutti, leggendo il precedente commento ho deciso di  provare a vedere se il mio programma restituisse valori negativi (fortunatamente si) ma, ho riscontrato un secondo problema inserendo i  seguenti valori:

g1=["ciao"]

g2=["ciao"]

g3=["ciao"]

g4=["ciao"]

dim_hand=4

num_letters=16

poiché il programma per come l'ho impostato esce dal ciclo while dopo aver  calcolato l'ultima parola di ogni giocatore.

il mio programma ha superato tutti i test poiché le parole che sono state inserite erano impostate a priori in modo tale che se il giocatore "x" finiva la partita i giocatori successivi non avevano altre parole da giocare.

Mi chiedevo se nei test "segreti" si sarebbe presentata questa problematica?
807 views
closed

10 Answers

Best answer
alessiodellasanta (11830 points)
8 14 34
by (11.8k points)
selected by
ottimo suggerimento andrea, effettivamente anche il mio di programma si "romperebbe" in quel caso.

la cosa è che al gioco mancano alcune regole fondamentali, tipo il poter utilizzare la stessa parola per ogni giocatore appunto...
Romitoskj (8920 points)
5 8 40
by (8.9k points)

Utilizzare la stessa parola non è proibito, il problema è questo.

andrea.sterbini (207880 points)
745 1264 2372
by (208k points)

grazie per il suggerimento devil

9
9Andrea9 (12340 points)
12 32 56
by (12.3k points)
questa conversazione non è mai esistita
G
Giordano_Dionisi (3100 points)
16 41 59
by (3.1k points)
Hai rovinato un sacco di persone calcola ahhahaahahah
R
Raffaele (3850 points)
15 27 49
by (3.9k points)

Non è un caso possibile num_letters < dim_hand * 4. 

Non posso creare le carte, non è un input valido, ovvio che i risultati sono sballati.

1
1914925 (3070 points)
2 4 23
by (3.1k points)

Stando a ciò che ha detto il Prof. Sterbini in questa discussione, nelle liste dovrebbero esserci SOLO quelle giocate, quindi nel tuo esempio dovrebbero essere g1=["ciao"], g2=[], g3=[], g4=[] con dim_hand=4 e num_letters=16

a
alessandro.bellia (930 points)
0 2 12
by (930 points)
Per risolvere dovresti controllare che la lunghezza della parola giocata dal giocatore x sia minore del numero di lettere che il giocatore x ha in mano, anche se ti costerà qualche cc :(

Comunque hai rovinato molte vite stasera.
Romitoskj (8920 points)
5 8 40
by (8.9k points)

Teoricamente, secondo le regole del gioco descritte nel testo dell'HW, se i giocatori successivi a colui che finisce la partita hanno parole da giocare nella lista è indifferente, poiché la partita ormai è conclusa e non le potrebbero giocare. Secondo il regolamento il tuo codice è corretto.

Avrebbe avuto senso se nel regolamento ci fosse stato scritto che la partita si conclude quando un giocatore finisce le lettere in mano, non ci sono lettere disponibili e i giocatori successivi non hanno parole da giocare.

Quindi permettere di giocare parole anche dopo la fine della partita va contro il regolamento.

a
alessandro.bellia (930 points)
0 2 12
by (930 points)
Non capisco come mai la partita finirebbe prima che ciascun giocatore abbia fatto il suo turno:

Quattro giocatori, 16 tessere, 4 tessere a testa
giocatore 1 scrive "ciao", successivamente lo fa il giocatore due, poi il tre e infine il quattro.
Fine della partita

Per quale motivo dovrebbe essere contro il regolamento?
Romitoskj (8920 points)
5 8 40
by (8.9k points)

Il gioco finisce quando un giocatore riesce a finire tutte le lettere nella sua mano e non ci sono più lettere a disposizione per rimpiazzare quelle che ha appena giocato

Nel caso descritto nella domanda il primo giocatore scrive "ciao", esaurisce le lettere nella sua mano e non può pescarne delle altre dato che non ce ne sono, quindi la partita è conclusa e i giocatori successivi non possono giocare. 

lcrainic (3320 points)
2 4 25
by (3.3k points)
Ottimo suggerimento per il Professore devo dire... anche io ho strutturato il mio ciclo while come te quindi in questo momento mi sto facendo la tua stessa domanda dopo aver letto haha.
Loriv3 (7970 points)
11 21 84
by (8.0k points)
E fu così che nessuno riuscì più a prendere 30
1
1937764 (3520 points)
7 14 42
by (3.5k points)

Dovrebbe essere vietato dal regolamento del gioco stesso, così per come è descritto nella consegna. In più, anche se il gioco non finisce mai, è fuori dalla consegna (se num_letters=32).

Sarebbe molto strano vedere test che vadano al di fuori di quella che è la consegna. Credo sia abbastanza strano, tanto valeva non specificare alcune caratteristiche a monte proprio.

a
alessandro.bellia (930 points)
0 2 12
by (930 points)
In che modo va fuori dalla consegna?
4 tessere a testa, tutti scrivono "ciao", finisce la partita.
Non vedo come questo sia fuori dalle regole (?)
1
1937764 (3520 points)
7 14 42
by (3.5k points)
Se il primo giocatore tira "ciao", deve pescare 4 carte. Se non ci sono abbastanza carte nel mazzo, le sue carte sono finite, quelle del mazzo anche, quindi dovrebbe finire la partita
a
alessandro.bellia (930 points)
0 2 12
by (930 points)
ma no, anche nell'esempio della consegna ci sono tre turni con 0 carte da pescare
a
alessandro.bellia (930 points)
0 2 12
by (930 points)
No oddio mi sa che hai ragione.
Ora non so più che output dovrebbe restituire :((
Romitoskj (8920 points)
5 8 40
by (8.9k points)
Non è così, rileggi bene la consegna e l'esempio.
1946981 (3070 points)
4 15 35
by (3.1k points)
Questo caso è diverso. La condizione per cui finisce il gioco è che siano finite le lettere da pescare e che una persona rimanga con zero lettere in mano (appunto semza poterne pescare altre). I giocatori dopo di lui non possono giocare perché è già game over
1
1937764 (3520 points)
7 14 42
by (3.5k points)
Come dovrebbe essere, scusa?
e
emanuele.segatori (380 points)
0 1 4
by (380 points)
Questo soltanto perche il giocatore ha altre tessere in mano... Nel momento in cui un giocatore ha 0 tessere e non puo pescare la partita deve finire oppure si va contro le regole stesse del gioco...

E l'input ad essere sbagliato, non il programma.

(scusa la mancanza di accenti ma non ho il layout italiano ora)
lcrainic (3320 points)
2 4 25
by (3.3k points)
Come dice emanuele è l'input ad essere sbagliato ma non l'algoritmo, perchè tecnicamente gli input che sono stati creati dal professore non vanno mai contro le regole stesse del gioco ed fatti apposta per poter far svolgere la partita in modo consueto... ovvero non si può presentare il caso da voi descritto. Il primo giocatore che ha 0 carte e non può pescare ha vinto.
a
alessandro.bellia (930 points)
0 2 12
by (930 points)

Ho riletto, è vero, è l'input ad andare contro le regole.
Come ha scritto qualcuno poco fa
 

quindi nel tuo esempio dovrebbero essere g1=["ciao"], g2=[], g3=[], g4=[] con dim_hand=4 e num_letters=16

Alessio Natalucci (3660 points)
7 10 23
by (3.7k points)

L'esempio stesso va contro il regolamento:

Il gioco finisce quando un giocatore riesce a
  finire tutte le lettere nella sua mano e non ci sono più lettere a
  disposizione per rimpiazzare quelle che ha appena giocato (ovvero,
  le 130 lettere sono esaurite, perché giocate oppure perché in mano
  agli altri giocatori).

Se num_letter = 16 e dim_hand = 4, ad inizio partita la situazione sarà num_letter=0 dim_hand_g1=4, dim_hand_g2=4, dim_hand_g3=4, dim_hand_g4=4. Quando il g1 giocherà 'ciao' si troverà con num_letter = 0 dim_hand_g1= 0 e di conseguenza il gioco terminerà con il risultato: [6, -12, -12, -12]

lcrainic (3320 points)
2 4 25
by (3.3k points)
esatto! ottima risposta.
c
c.giannobile (660 points)
0 2 6
by (660 points)
Io penso che bisogni ragionare come qualsiasi gioco da tavola. Ad esempio prendiamo il gioco dell'oca, se il primo giocatore lancia i dadi e arriva al traguardo non deve necessariamente aspettare che anche gli altri giocatori impostino la giocata, ma semplicemente ha vinto.

Nel mio caso esco dal ciclo while al primo giocatore che finisce le parole e non ci sono altre lettere da giocare, come descritto nel regolamento.