Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

[HOMEWORK] Homework 2 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
    • come segnalato sotto da @Wahya, nel 4° esempio c'è un refuso (ma la graduatoria nel testo è corretta)
      • Alla fine 0 ha 0 sfide, 1 ha 1 sfida e 2 ha 2 sfide ( 1 ha 2 sfide e 2 ha 1 sfida), per cui
    • NON modificate il contenuto degli argomenti. Ho aggiunto un test per far fallire queste modifiche.
    • NOTATE che mi sono dimenticato di togliere il warp-factor 2 dai test che vi ho dato nello ZIP, e che doveva essere applicato SOLO alla VM. Quindi sulle vostre macchine che girano molto più veloci avete un timeout di 12s invece che 6s. Per "giocare alla pari" dovreste togliere il *2 all'inizio di test_01.py
  • NOTA: per eseguire i test SENZA i controlli e il timeout modificate test_01.py settando la variabile DEBUG=True
  • NOTA: ricordo a tutti che verranno applicati dei test segreti, quindi ogni soluzione che sfrutta particolari condizioni presenti nei test pubblicati potrebbe fallire.

Istruzioni

Per svolgere l'homework:

  • Installate le librerie necessarie (COMPRESO stopit)
  • Scaricate il file HW2-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
    • 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() o print(), 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.
  • 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 6/11/21 (consegnate entrambi i file)
  • Il giorno seguente vi verranno assegnati 3 algoritmi anonimi da valutare entro le 23:59 del 8/11/21
  • Una volta ricevuti i suggerimenti dai compagni, dopo averli valutati tutti, potrete riconsegnare un programma migliore entro le 23:59 del 10/11/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=2

Potete consegnare più volte, vale l'ultima.

12 Answers

D
Davide Vittucci (640 points)
4 5 8
by (640 points)
Se non consegnassi entro il 6/11 sarei escluso dalla riconsegna o posso fare un'unica consegna entro il 10?
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
La prima che hai detto
P
Pietroos (6020 points)
5 8 11
by (6.0k points)
Va consegnato obbligatoriamente il file .txt?
anaran (7090 points)
3 5 37
by (7.1k points)
reshown by
Si è obbligatorio; con dentro spiegato l'algoritmo da te implementato, a parole.
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Certamente.             .
A
Alessio (670 points)
1 2 6
by (670 points)

Ma nel file algorithm.txt dobbiamo descrivere l'algoritmo a parole spiegando i passaggi effettuati? 

 

andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Esatto                   .
f
fraa.dap (1280 points)
4 10 15
by (1.3k points)
Posso utilizzare il pacchetto Itertools di Python all'interno del programma?
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Leggi meglio le istruzioni
Wahya (7760 points)
1 2 15
by (7.8k points)

Nel quarto esempio della consegna c'è un refuso :
" La sfida 0, 1 è vinta da 1 per 4 punti a 0.
        La sfida 0, 2 è vinta da 2 per 3 punti a 1.
        La sfida 1, 2 è vinta da 1 per 3 punti a 1.
        Alla fine 0 ha 0 sfide, 1 ha 1 sfida e 2 ha 2 sfide
( 1 ha 2 sfide e 2 ha 1 sfida), per cui
        la classifica finale sarà [1, 2, 0]."

La classifica finale è giusta, lo scrivo per evitare che qualcuno impazzisca con i ragionamenti per capire cosa non vada nell'esempio.

andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Grazie per la segnalazione, lo riporto sopra
T
TommasoBruni (870 points)
7 15 20
by (870 points)
Buonasera professore,

le descrizione dell'algoritmo deve essere fatta sia in italiano che in inglese, oppure va bene solo in italiano?

Grazie.
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Se consegni qui meglio in italiano
_
__Michele__25 (380 points)
0 0 3
by (380 points)
Buonasera professore,

è possibile utilizzare la funzione zip dato che non fa parte di nessuna libreria esterna?

Grazie
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
certo                      .
a
a.pomella (390 points)
0 0 3
by (390 points)
Buona sera Professore.

Scusatemi ma sto impazzendo. Sul mio PC il test01.py da Anaconda Prompt completa tutti i 16 test con successo. Invece vedo che il risultato dei test effettuati sul file che ho inviato sono falliti su 3 test. Dato che ho visto che i file di dati, almeno dal nome, sembrano essere esattamente quelli scaricati con l'esercizio, potrei sapere come capire meglio anche dal log visibile nella pagina dei risultati cosa può essere fallito? Mi indica infatti una riga in particolare dove ho usato la funzione abs() ma a parte il fatto che non ho importato alcuna libreria, la stessa istruzione viene passata anche dagli altri 13 test, quindi non capisco cosa c'è che non va.

Possibile che il problema sia causato dal fatto che sto utilizzando un PC Windows 10?

Grazie
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
ma che la VM è 2 volte più lenta non l'avete ancora capito?
S
S3b4stian82 (2250 points)
4 6 27
by (2.3k points)
Prof, non so su cosa giri la VM, ma le assicuro che viaggia più spedita del mio Ryzen 5 5600X
a
a.pomella (390 points)
0 0 3
by (390 points)

Sì sì, è ben chiaro. Infatti ho modificato anche test01.py impostando il timeout sia a 1 sia a 24 ma in ogni caso mi passa tutto.

Era solo per capire come interpretare il seguente mesaggio in modo tale che posso cercare di correggere qualche errore che mi sfugge; mi sembra infatti che accada qualcosa nella parte in cui eseguo un if di un abs(ord(a)-ord(b)) ma non riesco a capire cosa sbaglio, dato che in 13 test su 16 questa istruzione passa e soprattutto dato che lo stesso test sulla mia macchina va; a questo punto credo sia un problema di environment di esecuzione suppongo. Comunque se fosse possibile o se qualcuno può aiutarmi riporto qui sotto (spero di non infrangere alcuna regola di comportamento) il testo della failure se fosse già capitato a qualcuno:

test_01.py=134= 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
test_01.py=33= in do_test
    result = program.ex(matches2, k)
program01.py=109= in ex
    confronto = confronta_pulite(strA, strB, k)
program01.py=193= in confronta_pulite
    if abs(ord(a) - ord(b)) <= k=
/home/andrea/miniconda3/lib/python3.8/site-packages/pytest_timeout.py=444= in write_title
    width = py.io.get_terminal_width()
/home/andrea/miniconda3/lib/python3.8/site-packages/py/_vendored_packages/apipkg/__init__.py=152= in __makeattr
    result = importobj(modpath, attrname)
/home/andrea/miniconda3/lib/python3.8/site-packages/py/_vendored_packages/apipkg/__init__.py=72= in importobj
    module = __import__(modpath, None, None, ['__doc__'])
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

args = ('py._io.terminalwriter', None, None, ['__doc__']), kargs = {}
name = 'py._io.terminalwriter', rest = [None, None, ['__doc__']]

    def _check_import(*args, **kargs)=
        name, *rest = args
        if name in forbidden or (not forbidden and name not in allowed)=
            print(f"Importing {name} (globals, locals, {rest[-2=]}) (not allowed)")
>           raise ForbiddenError(f"The import of '{name}' is forbidden")
E           testlib.ForbiddenError= The import of 'py._io.terminalwriter' is forbidden

testlib.py=44= ForbiddenError
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
E' un timeout  ...... ma pytest vuole stampare il messaggio in rosso e importa terminalwriter
a
a.pomella (390 points)
0 0 3
by (390 points)
Perfetto, grazie mille. Mi concentro sui tempi di esecuzione allora. Grazie mille
e
ec22 (340 points)
0 0 2
by (340 points)
reshown by
Ieri pomeriggio, facendo delle prove e cercando di abbassare il tempo di esecuzione ho caricato un codice variando qualcosina. Come risultato però ho avuto un aumento di circa due secondi sull'efficienza. A quel punto ho tolto le modifiche ed ho ricaricato lo stesso codice che c'era in precedenza e nonostante ciò, il codice risulta nuovamente 2 secondi più lento (sono sicuro di aver ricaricato lo stesso codice).
Exyss (21510 points)
1 2 79
by (21.5k points)
Da quanto sembra la vm è un po' sotto stress perché stanno tutti consegnando questi ultimi giorni, quindi è normale ottenere 1-2 secondi in più
anaran (7090 points)
3 5 37
by (7.1k points)
edited by
Anche a me è successo, ho perso il bonus su efficienza
a
a.pomella (390 points)
0 0 3
by (390 points)
Scusate,

ma nel peer-assesment, i suggerimenti li riceveremo dalle 00.00 del 09/11 dopo che avremo risposto a tutti gli esercizi assegnati oppure è possibile visualizzarli prima? In quest'ultimo caso posso chiedervi dove si vedono?

Grazie
E
EricaF (640 points)
2 2 4
by (640 points)
Li puoi trovare, se sono stati fatti, in Course –> Results —> Feedback.
a
a.pomella (390 points)
0 0 3
by (390 points)
E' in queste occasioni che mi rendo conto di essere veramente cieco.....grazie mille