Chiarimenti su HW8-req

iacopomasi (2780 points)
13 20 41
asked Dec 10, 2021 in HW8 by iacopomasi (2,780 points)
edited Dec 13, 2021 by iacopomasi
Table of Contents
_________________

1. Chiarimenti HW8-req
.. 1. Lista dei colori vuoti, che non "riempie" il pattern o casi "incoerenti".
.. 2. Si assume che nella lista dei colori non vi siano ripetizioni.
.. 3. Non e' esplicitamente richiesto di calcolarsi il numero totale di combinazioni.
.. 4. Nel testo la dimensione D corrisponde ad un lato della immagine quadrata.
.. 5. Immagini doppioni ma passo i test.
.. 6. Ricorsione, dummy function, impostazione, ricorsione non rilevata.
.. 7. Img_properties è ovviamente una stringa che contiene del testo NON un file.
.. 8. Immagini di 1 pixel e ricorsione non riconosciuta

1 Chiarimenti HW8-req
=====================

  Spero che questo post possa chiarire alcuni dettagli su *HW8* dato il
  numero di domande che sono state fatte.  Premettiamo che quando
  prepariamo gli HW non è che nei test regolari e segreti vi vogliamo
  "ingannare" con dei casi speciali. A volte semplicemente non riusciamo
  a specificare immediatamente tutti i possibili casi e rendere
  l'esercizio cyrstal clear.

  Facciamo chiarezza su un po' di punti:

1.1 Lista dei colori vuoti, che non "riempie" il pattern o casi "incoerenti".
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  In questo caso il problema non si pone perchè se ci pensate bene è
  come aver finito le mosse possibli in un albero di gioco e quindi il
  vostro stato iniziale coincide direttamente con la fine. In altre
  parole, a partire da quella condizione non potete generare niente
  quindi la struttura dati che è chiesta al ritorno deve essere per
  forza vuota.  Riposta: Lista vuota. Se scrivete bene il codice vi
  dovrebbe venire naturale di generare una lista vuota, senza casi
  particolari da gestire.

1.2 Si assume che nella lista dei colori non vi siano ripetizioni.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Questa osservazione è pertinente. Si assume che non vi siano
  ripetizioni di colori ossia che i colori all'interno della lista siano
  sempre unici.

1.3 Non e' esplicitamente richiesto di calcolarsi il numero totale di combinazioni.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Anche se e' un'ottima cosa per ragionare sul problema. Una volta che
  impostate la ricorsione correttamente vi dovrebbe venire gratis.

1.4 Nel testo la dimensione D corrisponde ad un lato della immagine quadrata.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Il testo specifica dimensione ma si intende la dimensione di un
  singolo lato dell'immagine quadrata.

1.5 Immagini doppioni ma passo i test.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Ottima osservazione. Quick answer: se avete doppioni è probabile che
  ci sia qualcosa non va, quindi dovete sistemare il vostre
  codice. Long: Potete inserire assert che rileva questa casistica. Mi
  sono dimenticato di inserire il controllo prima sulla grandezza della
  lista. Ovviamente il risultato non è corretto ed è passato in maniera
  fortuita. Cercate di sistemare a monte (prima) il vostro programma
  perchè non dovrebbe generare doppioni. Anche perchè è probabile che
  non passiate i timeout se generate più immagini del dovuto. Nel
  frattempo decidiamo con gli altri docenti se aggiornare i test.

1.6 Ricorsione, dummy function, impostazione, ricorsione non rilevata.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Evitate la cosa sgradevole di inserire una funzione dummy che va in
  ricorsione.  Il problema è strutturato in modo che si risolve bene in
  modo ricorsivo. Ho spiegato a lezione che un modo per attaccarlo è
  come albero di gioco in cui vi è da costruire un'immagine. Si parte
  dallo stato vuoto e uno può fare una mossa aggiungendo un pixel o un
  qualcosa che vi porta in un altro stato più vicino alla soluzione.
  Nel caso dei pattern c'è da pensare bene alle prossime mosse.  Contano
  anche le funzioni ricorsive che sono definite esternamente ad ex() ma
  sono invocate poi dentro ex() ovviamente. Se definite una inner
  function ricorisiva dentro ex() mi sa che NON passate il test di
  ricorsione.  Ottimo avvertimento anche in vista dell'esame.

1.7 Img_properties è ovviamente una stringa che contiene del testo NON un file.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1.8 Immagini di 1 pixel e ricorsione non riconosciuta
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Alcuni test hanno il controllo alla chiamata ricorsiva disattivato
  (vedi primo test), nel caso in cui non vi siano colori multipli.  Se
  hai anche un solo pixel ma piu' di un colore ha senso controllare la
  ricorsione (caso 2).  Ho notato che test 13 non controlla la
  ricorsione ma e' un errore dato dalla spostamenti di alcuni test
  (andrebbe controllato invece).

  Spero possa aiutare e diminuire incertezza.  Via via che ci sono
  dubbia cerco di aggiornare il post.

6 Answers

p
ph04 (1090 points)
11 20 27
answered Dec 10, 2021 by ph04 (1,090 points)
La ringrazio molto per tutte le delucidazioni inserite
Tommaso.Lopedote (1340 points)
3 9 24
answered Dec 10, 2021 by Tommaso.Lopedote (1,340 points)
reshown Dec 11, 2021 by iacopomasi

Riguardo alla ricorsività del problema quindi per passare il test di ricorsività basta che una funzione definita al di fuori della funzione ex sia ricorsiva, non è NECESSARIO che ex sia ricorsiva di per se.

iacopomasi (2780 points)
13 20 41
commented Dec 11, 2021 by iacopomasi (2,780 points)
Esattamente. Anche all'esame vale la solita regola. Basta NON definire una inner function ricorsiva ma sempre esterna all'esercizio principale.
Wahya (7760 points)
1 2 15
answered Dec 10, 2021 by Wahya (7,760 points)
Grazie professore, ora mi è tutto decisamente più chiaro.
Luigi Pizza (6120 points)
11 20 65
answered Dec 11, 2021 by Luigi Pizza (6,120 points)

Può spiegare meglio cosa significa:

Contano anche le funzioni ricorsive che sono definite esternamente ad ex() ma
sono invocate poi dentro ex() ovviamente. Se definite una inner
function ricorsiva dentro ex() mi sa che NON passate il test di
ricorsione.  Ottimo avvertimento anche in vista dell'esame.

Nel caso in cui chiami da ex una funzione che chiama un'altra funzione, che ne chiama una ricorsiva, quest'ultima viene riconosciuta dal test? 

iacopomasi (2780 points)
13 20 41
commented Dec 11, 2021 by iacopomasi (2,780 points)
edited Dec 11, 2021 by andrea.sterbini

Per il caso che descrivi nella domanda non ho mai provato: puoi fare un test e vedere se funziona.

Solitamente un solo "livello" di funzione esterna basta a risolvere gli esercizi.

Come sotto funziona.

# funzione ausiliaria

def ricorsiva():

    ...

    ...

    ricorsiva()

    ...

# Funzione esercizio principale

def ex():

     valore = ricorsiva()

     return valore

Invece se definisci la funzione ausiliaria come inner function di ex() il controllo non funziona.

Matypist (5370 points)
8 16 45
answered Dec 13, 2021 by Matypist (5,370 points)
edited Dec 13, 2021 by Matypist
Mi sembra di capire che D = 1 (il caso particolare da cui il mio quesito: https://q2a.di.uniroma1.it/24150/) fa parte:
a) dei casi "incoerenti" (chiarimento 1.1) per cui va restituita una lista vuota se con img_properties diverso da ""
b) dei casi in cui non c'è un controllo ricorsivo

La mia assunzione è corretta?
iacopomasi (2780 points)
13 20 41
commented Dec 13, 2021 by iacopomasi (2,780 points)
edited Dec 15, 2021 by iacopomasi

a) Si. Cmq non lo metteremo nei test segreti cosi evitiamo confusione e non lo avete nei test correnti.

b) Se D=1 ma abbiamo piu di un colore allora si controlla la ricorsione

B
BesMorgan (2950 points)
1 2 16
commented Dec 13, 2021 by BesMorgan (2,950 points)
Professore, aprendo il file data images_data_03.json, {"colors": [0, 255], "D": 2, "img_properties": ""},ove il pattern sarebbe appunto stringa vuota, negli expected si notano tutte le combinazioni possibili della matrice.(come il caso del pattern_diff_)

Dobbiamo quindi trattare questo caso nello stesso modo?
andrea.sterbini (172780 points)
513 935 1789
commented Dec 13, 2021 by andrea.sterbini (172,780 points)
Se il pattern è stringa vuota vuol dire che non ci sono vincoli per i colori possibili di ciascuna casella.

Quindi valgono tutte le combinazioni.
B
BesMorgan (2950 points)
1 2 16
commented Dec 13, 2021 by BesMorgan (2,950 points)
La ringrazio.
anaran (7090 points)
2 5 37
commented Dec 15, 2021 by anaran (7,090 points)
edited Dec 15, 2021 by anaran
Mi sembra di capire che in caso di pattern_cross_ e D=1 andrebbe tornata una lista vuota, dico bene? O si eviterà proprio questo caso nei test segreti? perché secondo questo ragionamento l'unico caso in cui si avrebbe un output diverso dalla [ ] sarebbe con img_properties "" come ha detto Matypist. La logica del programma sembrerebbe(a me) dover essere la stessa, se non per un controllo su questa questione.
iacopomasi (2780 points)
13 20 41
commented Dec 15, 2021 by iacopomasi (2,780 points)

Vedi sopra: a) Si. Cmq non lo metteremo nei test segreti cosi evitiamo confusione e non lo avete nei test correnti. Non avrebbe senso chiederlo se non vi diciamo come gestirlo. 

A volte, nei casi in cui succede e' un errore da parte nostra.

anaran (7090 points)
2 5 37
commented Dec 16, 2021 by anaran (7,090 points)
La ringrazio della delucidazione.
James_F (4750 points)
7 14 37
answered Dec 19, 2021 by James_F (4,750 points)

Gentili professori @andrea.sterbini  @iacopomasi  @angelo.spognardi  ma il test 'images_data_02.json' ha controllo sulla ricorsione o no? perché in locale lo ha e mi "faila" mentre in vm passa il test perché non c'è controllo. 
Io ho implementato la funzione ricorsiva (l'unica che funziona per ora...) che evidentemenete nel test 02 cade in un caso base (ma sempre della funzione in cui viene  eseguita la ricorsione si parla).

Mi chiedevo se fosse un errore. 
Grazie

marcofelici (3160 points)
1 2 20
commented Dec 19, 2021 by marcofelici (3,160 points)

Ciao, non è un errore perchè all'inizio i professori avevano pensato di non inserire il controllo solo nel caso di D=1 e 1 colore ma poi hanno scritto in questo post che avrebbero disattivato il test sulla ricorsione per qualsiasi D=1 a prescindere dal numero di colori e cosi è stato fatto in VM. In locale basta che inserisci "False" tu stesso ai file test ed è corretto. 

James_F (4750 points)
7 14 37
commented Dec 19, 2021 by James_F (4,750 points)
grazie mille del chiarimento!