[AVVISO] Homework 2 di recupero (scadenza 4-5 gg prima dell'esame)

andrea.sterbini (167380 points)
487 897 1724
asked Nov 8, 2019 in Avvisi by andrea.sterbini (167,380 points)
edited Nov 10, 2019 by andrea.sterbini

Questo HW è dedicato a chi non ha completato lo HW2obb, o gli è stato annullato, o vuole alzarne il voto (vale il massimo dei 2).

ATTENZIONE

  • ATTENZIONE: abbiamo corretto alcuni dei test casuali. HO AGGIORNATO LO ZIP CON IL JSON GIUSTO (oggi 10/11/19).
  • eventuali correzioni verranno inserite qui
  • NOTA: il programma test_01.py DISATTIVA la funzione print, quindi non vedrete stampe. Per riattivare le stampe seguite le istruzioni all'inizio dello HW1

Istruzioni

Per svolgere l'homework:

  • Installate le librerie necessarie (compresa la libreria stopit)
  • Scaricate il file HW2rec.zip e scompattatelo in una directory (AGGIORNATO il 10/11/19)
    • Lo zip contiene
      • l'esercizio da svolgere, descritto all'inizio del file program01.py
        • 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 ad eseguire i test sulla vostra macchina
  • Posizionatevi nella directory HW2rec creata unzippando l'archivio ed editate il file program01.py completando la funzione indicata
  • 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: E' VIETATO copiare codice dalle librerie di sistema.
  • 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 HW1opz ottenuta scompattando lo zip
    • eseguite il comando (test senza timeout)
      • pytest test_01.py -v -rA
    • oppure (test con timeout di 1 secondo per ciascun test e con una stampa dei tempi impiegati per eseguire ciascun test)
      • pytest test_01.py -v -rA --timeout 1 --durations 0
    • oppure (test con timeout di 1 secondo per ciascun test e stampa dei tempi spesi dal programma nelle 20 funzioni complessivamente più lente)
      • pytest test_01.py -v -rA --timeout 1 --profile
    • Per far fermare i test al primo errore aggiungete l'opzione -x
    • Per chi usa Spyder:
      • è 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++

Consegna

Dovrete consegnare:

  • program01.py: il programma da voi realizzato

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

Scadenza: 4-5 giorni prima dell'esame

Per permettermi di applicare i test segreti, verificare eventuali somiglianze e calcolare i voti di ammissione all'esame, esaminerò SOLO i programmi consegnati entro 4 giorni PRIMA della data di esame. (esempio: le 23:59 del 24 gennaio per chi fa l'esame il 29 gennaio)

3,066 views

3 Answers

Tommaso Sgroi (12990 points)
6 11 91
answered Nov 10, 2019 by Tommaso Sgroi (12,990 points)
edited Nov 10, 2019 by Tommaso Sgroi
È possibile svolgere l'homework 2  di recupero anche se è stato passato il 2 obbligatorio?
Christian (15220 points)
2 4 77
commented Nov 10, 2019 by Christian (15,220 points)
"Questo HW è dedicato a chi non ha completato lo HW2obb, o gli è stato annullato, o vuole alzarne il voto (vale il massimo dei 2)."

Quindi se hai preso meno di 30 puoi provare ad alzare il voto.

PS: parliamo ovviamente di quello di recupero, non quello opzionale.
a
andreasolda (740 points)
11 17 21
commented Nov 11, 2019 by andreasolda (740 points)

Salve, io ho svolto  homework obbligatorio, Ma mi sa dire le differenze che ci sono con questo Homework di recupero ovvero anche questo da punti bonus per l'esame? oppure questo bonus È riservato agli homework obbligatori?

andrea.sterbini (167380 points)
487 897 1724
commented Nov 11, 2019 by andrea.sterbini (167,380 points)
Come indicato nelle regole, i recuperi non danno bonus
f
federico_modesti (280 points)
0 1 3
commented Jul 7, 2020 by federico_modesti (280 points)
Buonasera,

sapete se è possibile svolgere e caricare di nuovo un homework di recupero già caricato su q2a per poter prendere un voto maggiore?
andrea.sterbini (167380 points)
487 897 1724
commented Jul 8, 2020 by andrea.sterbini (167,380 points)
Certo, il voto è quello dell'ultima consegna
LorenzoChicca (1140 points)
4 6 18
answered Nov 11, 2019 by LorenzoChicca (1,140 points)
Professore può controllare il testo dell'esercizio?

Nell'esempio dice che la funzione deve ritornare l'indice 7. Ma nelle stringhe 6 e 6+1 oppure nelle 7 e 7+1, non trovo che siano non compatibili. Tutte le coppie sono compatibili secondo me.

Oppure sono io che non ho compreso?

Grazie
E
Edward (25950 points)
2 4 172
commented Nov 11, 2019 by Edward (25,950 points)
La stringa deve essere compatibile con TUTTE le stringhe precedenti, ls[8] non è compatibile con ls[1].
edoardottt (8210 points)
1 3 37
commented Nov 11, 2019 by edoardottt (8,210 points)

Riporto quello che c'è scritto nel testo. Devono essere a due a due compatibili, se per esempio prendiamo l'indice 7, devono essere a coppie compatibili dalla 0 fino alla 7. Quindi la 0 con tutte le altre(fino alla 7 compresa), la 1 con tutte le altre etc.. Per esempio la prima non compatibile è quella con indice 8, cioè la nona, perché ls[1] non è compatibile con ls[8] dato che i massimi sono 5 ed 8, ma in ls[8] è presente 7, che è maggiore di 5.

ls=[
  '1,3,4,2,6',
  '1,4,3,3,5',
  '6,3,1,4,1',
  '1,7,4,3,2',
  '1,2,3,4,7',
  '1,6,3,4,2',
  '1,2,6,4,3',
  '7,2,3,4,1',
  '8,1,2,6,1',
  '1,4,3,2,7',
  '1,8,3,4,2',
  '9,2,3,4,9'
  ]
  restituisce 7 perchè le prime 8 stringhe sono a due a due compatibili,
  mentre se prendiamo le prime 8(qua credo si intenda le prime 9) stringhe ne esistono almeno due non compatibili.

LorenzoChicca (1140 points)
4 6 18
commented Nov 11, 2019 by LorenzoChicca (1,140 points)
Grazie!

Avevo capito coppie 2 a 2 e passavo 5 test.

Dopo provo a correggere il codice. Grazie ancora!
LorenzoChicca (1140 points)
4 6 18
commented Nov 27, 2019 by LorenzoChicca (1,140 points)
edited Dec 22, 2019 by LorenzoChicca
Riesci a passare tutti i test?
A me falisce un paio di test
s
simone.lioy (1420 points)
21 30 39
answered Dec 21, 2019 by simone.lioy (1,420 points)
io non ho capito proprio la traccia, qualcuno che mi può spiegare meglio?
j
juanjozo (680 points)
3 6 8
commented Dec 22, 2019 by juanjozo (680 points)

Prendiamo l'esempio del testo:

ls=[
  '1,3,4,2,6',
  '1,4,3,3,5',
  '6,3,1,4,1',
  '1,7,4,3,2',
  '1,2,3,4,7',
  '1,6,3,4,2',
  '1,2,6,4,3',
  '7,2,3,4,1',
  '8,1,2,6,1',
  '1,4,3,2,7',
  '1,8,3,4,2',
  '9,2,3,4,9' ]

La funzione deve restituire 7 perchè, se prendiamo la stringa in posizione 1 (la seconda stringa, ovvero 1,4,3,3,5) e la stringa in posizione 8 (la nona, ovvero 8,1,2,6,1) queste non sono compatibili, perchè il massimo della prima è 5, mentre il massimo della seconda è 8. Ora, siccome il minimo dei due massimi è 5, ci tocca vedere se in una delle due stringhe è presente un valore maggiore di 5 ma diverso da 8 (poichè è il massimo della seconda stringa e quindi lo escludiamo). In questo caso, troviamo il valore 6 nella seconda stringa, che è maggiore di 5 e diverso da 8. Quindi la funzione restituiste 7 perchè le prime 8 stringhe sono compatibili tra di loro (qualsiasi coppia di stringhe che prendiamo di queste 7 sono compatibili tra di loro, ad esempio 1,4,3,3,5  e 1,7,4,3,2 lo sono, perchè i massimi sono 5 e 7, il minimo tra questi due è 7, e non si trova nessun valore maggiore di 5 e diverso da 7 (per essere non compatibili dovrebbe essere presente l'elemento 6 nella seconda)).

V
ValerioPaesani (200 points)
0 0 2
commented Dec 22, 2019 by ValerioPaesani (200 points)

Ciao, come fa ad esempio nel test:  "60_sequenze_casuali_J_8" a venire 8? Di seguito i valori delle prime 8 liste ordinati in questo modo:

maxL1, maxL2,terzo valoreMaggiore

[11000, 11000, 10998]
[11000, 11000, 10996]
[11000, 11000, 10984]
[11000, 10999, 10976]
[10999, 10998, 10997]
[10998, 10998, 10997]
[10998, 10998, 10977]
[10998, 10998, 10970]

MaxL1 sta per valore massimo della prima lista, MaxL2 sta per valore massimo della seconda lista e terzoValoreMaggiore è il valore maggiore tra le due liste che scorriamo a due a due. 

Come fa a venire 8 ?  Spero si sia capito quel che ho scritto

andrea.sterbini (167380 points)
487 897 1724
commented Dec 22, 2019 by andrea.sterbini (167,380 points)
edited Dec 22, 2019 by andrea.sterbini

@ValerioPaesani Cosa non ti torna? cosa dovrebbe tornare secondo te?

come fai ad elencare i valori massimi delle due liste per ciascuna posizione da 1 a 8? i due massimi dipendono da quali due liste stai confrontando, ad esempio la 3 con la 5 oppure la 7 con la 2

s
simone.lioy (1420 points)
21 30 39
commented Dec 22, 2019 by simone.lioy (1,420 points)
grazie mille adesso mi è più chiaro tutti, quindi in una lista di interi devo fare questo confronto, quindi la lista va splittata per un confronto con gli altri interi giusto?
s
simone.lioy (1420 points)
21 30 39
commented Dec 22, 2019 by simone.lioy (1,420 points)
la lista viene divisa per ogni 5 numeri ma anche quando andrò ad eseguire il test, oppure mi devo dividere la lista ogni 5 numeri?
s
simone.lioy (1420 points)
21 30 39
commented Dec 22, 2019 by simone.lioy (1,420 points)
risolto grazie lo stesso, non avevo letto che era divisa da virgola, errore mio