"test segreti" per l'HW2

9
9Andrea9 (12340 points)
10 31 56
asked Nov 5, 2020 in HW2 obbligatorio by 9Andrea9 (12,340 points)
recategorized Nov 6, 2020 by andrea.sterbini
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?
530 views

10 Answers

Best answer
alessiodellasanta (11830 points)
7 13 34
answered Nov 6, 2020 by alessiodellasanta (11,830 points)
selected Nov 6, 2020 by 9Andrea9
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)
4 7 40
commented Nov 6, 2020 by Romitoskj (8,920 points)

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

andrea.sterbini (172340 points)
510 927 1776
answered Nov 5, 2020 by andrea.sterbini (172,340 points)

grazie per il suggerimento devil

9
9Andrea9 (12340 points)
10 31 56
commented Nov 5, 2020 by 9Andrea9 (12,340 points)
questa conversazione non è mai esistita
G
Giordano_Dionisi (3100 points)
12 38 58
commented Nov 5, 2020 by Giordano_Dionisi (3,100 points)
Hai rovinato un sacco di persone calcola ahhahaahahah
R
Raffaele (3850 points)
10 24 48
commented Nov 6, 2020 by Raffaele (3,850 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)
1 4 23
answered Nov 5, 2020 by 1914925 (3,070 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
answered Nov 5, 2020 by alessandro.bellia (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)
4 7 40
answered Nov 5, 2020 by Romitoskj (8,920 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
commented Nov 5, 2020 by alessandro.bellia (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)
4 7 40
commented Nov 5, 2020 by Romitoskj (8,920 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
answered Nov 5, 2020 by lcrainic (3,320 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)
8 20 84
answered Nov 5, 2020 by Loriv3 (7,970 points)
E fu così che nessuno riuscì più a prendere 30
1
1937764 (3520 points)
6 14 42
answered Nov 5, 2020 by 1937764 (3,520 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
commented Nov 5, 2020 by alessandro.bellia (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)
6 14 42
commented Nov 5, 2020 by 1937764 (3,520 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
commented Nov 5, 2020 by alessandro.bellia (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
commented Nov 5, 2020 by alessandro.bellia (930 points)
No oddio mi sa che hai ragione.
Ora non so più che output dovrebbe restituire :((
Romitoskj (8920 points)
4 7 40
commented Nov 5, 2020 by Romitoskj (8,920 points)
Non è così, rileggi bene la consegna e l'esempio.
1946981 (3070 points)
4 14 34
commented Nov 5, 2020 by 1946981 (3,070 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)
6 14 42
commented Nov 5, 2020 by 1937764 (3,520 points)
Come dovrebbe essere, scusa?
e
emanuele.segatori (380 points)
0 1 4
commented Nov 5, 2020 by emanuele.segatori (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
commented Nov 5, 2020 by lcrainic (3,320 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
commented Nov 5, 2020 by alessandro.bellia (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)
5 10 23
answered Nov 5, 2020 by Alessio Natalucci (3,660 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
commented Nov 5, 2020 by lcrainic (3,320 points)
esatto! ottima risposta.
c
c.giannobile (660 points)
0 2 6
answered Nov 6, 2020 by c.giannobile (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.