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.

hw8 test 9 problema funzione ricorsiva

M
Matteo Santucci (460 points)
0 2 5
in HW8 by (460 points)
closed by
Salve a tutti ho un problema con la funzione ricorsiva per il test 9.

Ho come risultato che non appena il B fa la mossa spostandosi in posizione 7, tutte le pedine diventano nere e la partita finisce attribuendo la vincita al B.

Invece dai risultati attesi le vittorie del nero sono 0.

Come dovrei considerare la board 9?

Il mio pseudo-codice è questo:
def function(parametro0, ..., parametroN):
 # Se il giocatore corrente non ha mosse valide e il giocatore successivo ha mosse valide
  # Chiamo function sul giocatore successivo
 # Se il giocatore corrente ha mosse valide
  # Calcolo tutte le possibili mosse valide
  # Itero sulle mosse valide
   # Coloro la matrice e la salvo in una nuova variabile ((nuova_matrice = [x[:] o x.copy() for x in vecchia_matrice]
   # Chiamo la funzione ricorsiva sulla nuova matrice e il nuovo giocatore
 # Ritorno i valori
320 views
closed with the note: Grazie ad i suggerimenti sono riuscito a risolvere

2 Answers

l.vitale3 (6010 points)
10 22 83
by (6.0k points)
"# Se il giocatore corrente non ha mosse valide e il giocatore successivo ha mosse valide"
Ma le condizioni per cui una partita finisce sono: se il giocatore corrente non ha mosse valide o la scacchiera è piena la partita finisce.
Quindi non capisco la condizione di guardare il giocatore successivo.
M
Matteo Santucci (460 points)
0 2 5
by (460 points)
Ho modificato in questo modo.

Gli ultimi 5 test non escono purtroppo

def function (param0, ..., paramN):
 # B0: Booleano che indica se il giocatore corrente ha mosse valide
 # B1: Booleano che indica se la scacchiera risulta essere piena
 # Se B0 e B1 sono vere:
  # Finisce la partita e calcolo a, b, c
 # Se B0 è falsa
  # Calcolo tutte le possibili posizioni valide per il giocatore corrente
  # Per ogni posizione valida
   # Coloro la matrice
   # Salvo tutti i parametri all'interno di una nuova allocazione di memoria
   # Richiamo ricorsivamente "Function" con i nuovi parametri e il giocatore successivo
 # Ritorno a, b, c
l.vitale3 (6010 points)
10 22 83
by (6.0k points)

Non è corretta come condizione (B0 e B1 vere). Perchè può capitare che la scacchiera non è piena e la partita finisce perchè il giocatore non ha mosse valide. Quindi la congiunzione è sbagliata devi usare un OR.

M
Matteo Santucci (460 points)
0 2 5
by (460 points)
È vero! Grazie mille!

Ero focalizzato in un altro modo e non ci avevo riflettuto!

Ancora grazie :D
andrea.sterbini (208020 points)
756 1270 2377
by (208k points)
La partita NON termina perchè il W può giocare
M
Matteo Santucci (460 points)
0 2 5
by (460 points)
Ok, perfetto, grazie mille