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.

[HOMEWORK] Homework 8 obbligatorio

andrea.sterbini (207920 points)
750 1267 2373
in Avvisi by (208k points)
edited by

ATTENZIONE:

  • eventuali correzioni verranno inserite qui, tenete d'occhio questa pagina
    • ATTENZIONE: i test 1 e 2 da adesso sono SENZA controllo della ricorsione, il 13 per un errore era senza e lo abbiamo riattivato
    • Per ulteriori chiarimenti vedete https://q2a.di.uniroma1.it/24058/chiarimenti-su-hw8-req
    • Suggerimento: potete considerare come "mossa" dell'albero di gioco, l'aggiungere un nuovo pixel ad una immagine parzialmente riempita.
    • NOTA: potete assumere che i colori saranno sempre diversi e ce n'è almeno 1
    • NOTA: implementate la funzione ricorsiva a livello più esterno (e non come inner function) altrimenti il test di ricorsione non la riconosce e non passerete i test.
    • NOTA: una soluzione iterativa per alcuni pattern che non usa la ricorsione non è valida ed annulla la vostra soluzione. Lo stesso se usate una funzione ricorsiva posticcia per fregare il test di ricorsione.
  • NOTA: per eseguire i test SENZA i controlli e il timeout modificate test_01.py settando la variabile DEBUG=True
  • NOTA: per eseguire i test CON i controlli ma con un timeout molto grande (per vedere quanto tempo ci mettete), cambiate il WARP factor in test_01.py

Istruzioni

Per svolgere l'homework:

  • Installate le librerie necessarie (COMPRESO stopit)
  • Scaricate il file HW8-req.zip e scompattatelo in una directory
    • Lo zip contiene
      • l'esercizio da svolgere, descritto all'inizio del file program01.ita.py (in italiano) oppure program01.eng.py (in inglese)
        • l'esercizio consiste nel realizzare, se necessario definendo funzioni ausiliarie, la funzione descritta all'inizio del file, completandone il codice
      • altre librerie e file necessari a eseguire i test sulla vostra macchina
  • Posizionatevi nella directory creata unzippando l'archivio e rinominate il file program01.ita.py con il nome program01.py
  • Editate i file:
    • program01.py implementando le funzioni necessarie a risolvere l'esercizio e senza cambiare il nome della funzione principale
    • algorithm.txt  in cui descrivete l'algoritmo utilizzato (senza inserire codice o info che vi possano identificare)
  • ATTENZIONE: il programma NON DEVE eseguire nessun input(), infatti riceve tutte le informazioni di cui ha bisogno tramite i parametri della funzione che dovete completare e torna il risultato con return.
  • ATTENZIONE: SONO VIETATE le variabili globali.
  • ATTENZIONE: SONO VIETATE tutte le altre librerie a parte quelle già importate nel testo.
  • ATTENZIONE: i vostri programmi NON DEVONO sfruttare eventuali periodicità o caratteristiche strutturali degli input, ma devono essere applicabili a qualsiasi input valido.
    • Dopo la scadenza verranno applicati dei test segreti per cui il vostro programma potrebbe fallire se risolve solo dei casi particolari.
  • ATTENZIONE: NON LASCIATE ISTRUZIONI DI TEST NEL PROGRAMMA, A MENO CHE NON SIANO DOPO UNA RIGA
    • if __name__ == '__main__':
      • vostre istruzioni di test che in questo modo non vengono eseguite durante l'import del file
  • Per eseguire i test
    • aprite una finestra "Anaconda Prompt" e posizionatevi nella directory ottenuta scompattando lo zip
    • eseguite il comando
      • pytest test_01.py -v -rA
    • oppure (con una stampa dei tempi impiegati per eseguire ciascun test)
      • pytest test_01.py -v -rA --durations 0
    • oppure (CON stampa dei tempi spesi dal programma nelle 20 funzioni complessivamente più lente)
      • pytest test_01.py -v -rA --profile
    • Per far fermare i test al primo errore aggiungete l'opzione -x
    • Per chi usa Spyder 4: (Spyder 5 non è ancora supportato dai plugin)
      • è possibile eseguire i test direttamente da dentro Spyder installando il plugin spyder-unittest (ma senza timeout o parametri aggiuntivi)
      • è possibile ottenere i tempi spesi in ciascuna funzione direttamente da dentro Spyder installando il plugin spyder-line-profiler

NOTA: per aprire i file di testo in formato utf8 NON usate Notepad che non riconosce gli accapi Unix ('\n') ma usate Spyder o Notepad++

Scadenze

  • Prima scadenza per TUTTI: ore 23:59 del 18/12/21 (consegnate entrambi i file)
  • Il giorno seguente vi verranno assegnati 3 algoritmi anonimi da valutare entro le 23:59 del 20/12/21
  • Una volta ricevuti i suggerimenti dai compagni, dopo averli valutati tutti, potrete riconsegnare un programma migliore entro le 23:59 del 22/12/21

Dovrete consegnare entrambi i file:

  • program01.py
  • algorithm.txt (file di testo utf8, usate Spyder o Notepad++)

La pagina di consegna è https://q2a.di.uniroma1.it/homeworks/delivery?homework=9

Potete consegnare più volte, vale l'ultima.

2 Answers

_
__Michele__25 (380 points)
0 0 3
by (380 points)
Salve,

ho provato ad invocare il comando per generare le immagini specificato nella consegna (python test_01.py data/images_data_15.json). Quando batto invio mi viene fuori quest'errore:

File "test_01.py", line 35
    line  = f'{bg} <h1> HW8-req (test {filename})<h1><br/><br/>'
                                                                                                  ^
SyntaxError: invalid syntax

Qualcuno sa come posso risolvere? Grazie
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
che versione di python usi? immagino precedente alla 3.8
_
__Michele__25 (380 points)
0 0 3
by (380 points)
Grazie per la risposta. Comunque uso la 3.10.0.

Anche io pensavo fosse un problema di versione ma scrivendo la stessa riga che va in errore nel file program01.py funziona correttamente.
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Io uso la 3.8.12 e non ho problemi. Sei nella directory giusta?
_
__Michele__25 (380 points)
0 0 3
by (380 points)
Si sono nella giusta directory.

Comunque ho "risolto": l'errore mi viene generato solamente su Mac OS. Su PC Windows con stessa versione di Python le immagini vengono generate correttamente.

Grazie dell'aiuto.
Tommaso.Lopedote (1470 points)
5 11 28
by (1.5k points)
Nel testo dell'esercizio viene detto che "img_properties" è un testo (riga 30), in seguito che è una stringa (riga 91).
Sono piccolezze ma uno potrebbe pensare di dover aprire un file per leggere "img_properties".