Alcune note sulla lezione di TdP del 11 Aprile 2017: 1) Sul repository Quadrato-Magico ho caricato l’ultima versione del codice vista a lezione. https://github.com/TdP-2017/Quadrato-Magico Da segnala la correzione di un errore in fase di valutazione di una soluzione candidata. La funzione per il controllo della somma delle diagonali checkDiagonals(), nella classe Square, non conteneva un if per controllare se la somma calcolata fosse uguale alla costante magica. Di conseguenza, ora, il numero di quadrati magici trovati e’ inferiore. (*Ringrazio per la segnalazione*) 2) Sul branch “Soluzioni_alternative” https://github.com/TdP-2017/Quadrato-Magico/tree/Soluzioni_alternative ho carico due classi Model alternative: - La classe ModelCount.java differisce da Model.java in quanto ritorna solo il numero di soluzioni trovate e non le soluzioni vere e proprie - La classe ModelFirst.java implementa una variante della funzione ricorsiva, che ritorna solo la prima soluzione trovata, se esiste, altrimenti null. 3) Sul repository 8Regine https://github.com/TdP-2017/8Regine ho caricato la soluzione vista a lezione del problema delle 8 regine. Nota: il numero di soluzioni possibili per una scacchiera 8x8 è pari a 92. Rispetto a quando visto a lezione, ho aggiunto l’implementazione del metodo [public boolean controllaDiagonale(int step)] unico vincolo mancante per costruire una soluzione esatta (gli altri sulle righe e colonne li abbiamo già analizzati). public boolean controllaDiagonale(int step) { for (int i = 0; i < step; i++) { if (step - i == Math.abs(griglia.get(step) - griglia.get(i))) return false; } return true; } Spiegazione: X 0 0 0 0 0 X 0 0 X 0 0 = = = = Nel caso di una scacchiera 4x4, immaginiamo di essere al passo 3 di 4, quindi solo le prime 3 righe sono state completate. Voglio poter verificare se l’ultima regina aggiunta (sulla terza riga) viola il vincolo della diagonale. Devo quindi controllare se la regina nella riga immediatamente sopra a quella attuale (quindi la seconda riga) dista di 1 posizione rispetto a quella della terza (ultima inserita) e se la regina della prima riga dista di 2 posizioni rispetto alla terza. In questo esempio il vincolo non è verificato perché la seconda e la terza regina si trovano sulla stessa diagonale (infatti distano di una posizione a distanza di 1 riga). Per qualsiasi dubbio, o informazione, scrivetemi a: andrea.marcelli@polito.it