HW6: Cosa è consentito usare...

LucianoBlasetti (800 points)
2 2 6
asked Nov 24, 2019 in HW6 obbligatorio by LucianoBlasetti (800 points)
recategorized Dec 6, 2019 by andrea.sterbini
Buongiorno,

anche se non espressamente vietato nella pagina delle istruzioni dell'esercizio, vorrei chiedere conferma circa la possibilità di utilizzare classi, oltre alle semplici funzioni e, nel caso, se è consentito l'uso di attributi e metodi statici.

Grazie e buona Domenica
955 views

6 Answers

a
a.pietroluongo (11250 points)
15 38 131
answered Nov 24, 2019 by a.pietroluongo (11,250 points)
Le classi si.
J
Jan Rogala (7260 points)
3 4 37
answered Nov 24, 2019 by Jan Rogala (7,260 points)
Non penso che sia vietato farlo, basti pensare che il primo HWobb molti lo hanno fatto con i dizionari quando in realtà era un HW basato sulle liste. Anche se ce da dire che questo HW è pensato per essere svolto con le basi che abbiamo appreso prima della sua pubblicazione, quindi ti consiglio di farlo con quelli, anche per prenderla come una preparazione all'esame
andrea.sterbini (172780 points)
514 935 1789
answered Nov 24, 2019 by andrea.sterbini (172,780 points)
Gli unici limiti sono il non usare altre librerie oltre immagini.py
a
a.pietroluongo (11250 points)
15 38 131
commented Nov 24, 2019 by a.pietroluongo (11,250 points)
e non usare le variabili globali
Tommaso Sgroi (12990 points)
6 11 91
answered Nov 24, 2019 by Tommaso Sgroi (12,990 points)
Nella pagina di consegna dice che è vietato l'uso di import diversi da immagini, quindi immagino sia consentito ciò che dici te. Se non è espressamente vietato allora è consentito.
plm (18850 points)
7 15 118
answered Nov 24, 2019 by plm (18,850 points)

Si, tutto tranne ciò che viene scritto in rosso ad ogni pubblicazione di un homework :

  • 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.
andrea.sterbini (172780 points)
514 935 1789
answered Nov 26, 2019 by andrea.sterbini (172,780 points)
Usare attributi statici delle classi ha lo stesso risultato di definire una variabile globale e potrebbe essere usato (furbescamente) per ottimizzare la misura dei tempi.
Non li usate.
LucianoBlasetti (800 points)
2 2 6
commented Nov 28, 2019 by LucianoBlasetti (800 points)
Grazie Prof.,

Lo scopo della mia domanda era proprio quello di essere sicuro di non oltrepassare i limiti del consentito. Avevo notato che la quasi totalità dei tempi di esecuzione era fuori dall'algoritmo e avevo quindi implementato un cache-aside pattern semplificato per ovviare alla lentezza dei tempi di caricamento delle immagini, ed ottimizzare i tempi di esecuzione (non la loro misura, in quanto anche senza cache l'algoritmo era performante).

Ho rimosso il meccanismo di cache, quindi tutto OK.

Forse vale la pena aggiornare la pagina delle istruzioni dell'Homework specificando questo ulteriore divieto, in modo che i colleghi che non hanno avuto modo di leggere questo thread non siano tentati di adottare questa soluzione.

P.S.: tolte ovviamente le variabili globali, ed ora le variabili statiche delle classi, se per pura passione e curiosità,  volessi ovviare ai tempi di caricamento di cui sopra, pensa che sarebbe accettabile ricorrere alla serializzazione su filesystem dei risultati intermedi di elaborazione (senza utilizzo di librerie esterne, con le sole funzioni di accesso ai files spiegate nel corso), così da poter implementare una cache persistente? (in caso negativo anche questa cosa andrebbe forse specificata nella pagina dell'HW).

Grazie mille!
andrea.sterbini (172780 points)
514 935 1789
commented Nov 28, 2019 by andrea.sterbini (172,780 points)
Direi che la cache su disco sarebbe un modo di fregare il calcolo dei tempi.

Bisogna chiedersi una semplice domanda: "sto concorrendo alla pari con gli altri o sto cercando di fregare?"
LucianoBlasetti (800 points)
2 2 6
commented Nov 28, 2019 by LucianoBlasetti (800 points)
Ok, ricevuto. Il problema è che senza dei limiti chiari ed oggettivi non è facile stabilire il confine fra il "fregare" e l'ottimizzare, mettendo a frutto quanto imparato.

A questo punto è consigliabile aggiungere nella pagina dell'hw, nella sezione dei divieti, qualcosa tipo: "È vietato utilizzare qualsiasi meccanismo di cache (in memoria o su file) che sia persistente nel corso di invocazioni ripetute della funzione es1(..) ".

Grazie di nuovo
andrea.sterbini (172780 points)
514 935 1789
commented Nov 28, 2019 by andrea.sterbini (172,780 points)

Honor code (buon comportamento)

A chi consegna un esercizio troppo simile ad un altro oppure si comporta da furbetto viene annullato l'homework. Un HW annullato deve essere recuperato. Non sono previsti HW di recupero degli HW di recupero.

Non è necessario definire nel dettaglio cosa è proibito, basta chiedersi se si sta concorrendo alla pari degli altri senza furbizie.

LucianoBlasetti (800 points)
2 2 6
commented Nov 28, 2019 by LucianoBlasetti (800 points)
Concordo pienamente nel principio generale. Ma poichè, nel caso in esame, è abbastanza semplice aggiungere i giusti paletti a livello di specifica, credo che questo vada a vantaggio di tutti, in modo da evitare che qualcuno si veda annullare inaspettatamente un HW,

Quando si dice "concorrendo alla pari", immagino che si  intenda che ci si deve attenere alle "regole del gioco", facendo uso degli insegnamenti ricevuti e non derogando dai vincoli imposti. Ora, nel caso specifico, se uno studente applica esclusivamente quanto insegnato nel corso (e fra gli argomenti abbiamo anche la lettura e scrittura dei files) e, non contravvenendo a quanto indicato nel testo dell'esercizio (ossia alle "regole del gioco": variabili globali, import di librerie, ecc.) implementa una soluzione generalizzata che offre migliori risultati in termini di performance, come si può giudicarlo "furbetto" ed annullargli il compito? Al contrario forse andrebbe premiato poichè ha saputo coniugare in maniera efficace tutti gli insegnamenti ricevuti per risolvere un problema reale nei limiti dei vincoli imposti, e con i soli strumenti a sua disposizione. Cosa assai diversa è se nel codice salta fuori qualcosa tipo "if file == 'pippo': return 1" (questa sì che sarebbe una scorrettezza/furbizia da punire).

Diciamo che, in linea generale, più le specifiche sono dettagliate, meno sono le possibilità di malintesi e di conseguenti penalizzazioni.

Il mio voleva essere solo un piccolo contributo al già ottimo corso.
andrea.sterbini (172780 points)
514 935 1789
commented Nov 28, 2019 by andrea.sterbini (172,780 points)
edited Nov 28, 2019 by andrea.sterbini

Vediamo se riesco a spiegarmi:

  • il calcolo dei tempi è ottenuto eseguendo per 3 volte 10 run dell'intera batteria di test. Di ciascun gruppo di 10 si prende la media (tempo totale/10) e delle tre esecuzioni si prende la migliore (quella con tempo medio minore).
  • QUALSIASI meccanismo che sfrutta caching NON eseguirà 30 volte la batteria di test ma solo 1, ottenendo una valutazione dei tempi di esecuzione falsata (tempo ottenuto 10 volte minore o quasi nullo).
  • Per noi questa è una scorrettezza grave nei confronti dei compagni. OGNI comportamento di questo tipo ci farà annullare l'esercizio, per quanto esso possa essere tecnicamente interessante.

Similmente il caso della ottimizzazione delle librerie usate:

  • usare immagini.png per migliorare i tempi è scorretto (abbiamo detto di NON usare altre librerie e questo è un modo di usare png senza farne l'import diretto)
  • copiare librerie nel program01.py è scorretto
  • reimplementare la lettura delle immagini png è scorretto

E sono sicuro che si possono inventare tanti altri modi per superare i test SENZA ottimizzare l'algoritmo ma ottimizzando le condizioni al contorno.

Tutti questi casi (e gli altri che ci si può inventare) sono furberie.

LucianoBlasetti (800 points)
2 2 6
commented Nov 28, 2019 by LucianoBlasetti (800 points)
Prof. si è spiegato benissimo. Temo che sia io a non essermi spiegato: suggerivo semplicemente di aggiungere un contenuto analogo  a questo suo ultimo post nella pagina dell'esercizio, proprio per agevalore il lavoro dei compagni, tutto quì.

Grazie di nuovo e mi scuso se non sono riuscito ad essere chiaro nei miei precedenti intereventi.
andrea.sterbini (172780 points)
514 935 1789
commented Nov 28, 2019 by andrea.sterbini (172,780 points)
Nelle regole siamo stati apposta generici, perchè si può essere molto bravi ad inventare nuove furbizie che non abbiamo previsto.
E' meglio indicare l'indirizzo etico da seguire, voi sapete cosa state facendo e se vi state comportando correttamente.