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

andrea.sterbini (172780 points)
513 935 1789
asked Nov 24, 2019 in Avvisi by andrea.sterbini (172,780 points)
edited Apr 8, 2020 by andrea.sterbini

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

ATTENZIONE

  • eventuali correzioni verranno inserite qui
  • La funzione da implementare deve tornare il numero di parole individuate (e scritte nel file)
  • NOTA: il programma test_01.py DISATTIVA la funzione print, quindi non vedrete stampe.
    Per riattivare le stampe ed eliminare il timeout settate la variabile DEBUG=True nel file test_01.py

Istruzioni

Per svolgere l'homework:

  • Installate le librerie necessarie (compresa la libreria stopit)
  • Scaricate il file HW4rec.zip e scompattatelo in una directory
    • 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 HW4rec 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=8

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)

1,726 views

1 Answer

m
matteo_dalessio (240 points)
0 0 2
answered Jan 23, 2020 by matteo_dalessio (240 points)
Buonasera professore,

sto riscontrando dei problemi con l'esercizio, oltre ai tempi di esecuzione troppo lunghi, l'algoritmo che ho scritto non supera il test su "parole_strane".

Analizzando il risultato del test ho notato che la parola che genera più anagrammi dovrebbe essere: "BoxIfNOXSQJzvKpfWmIrol", tra gli anagrammi c'è la parola: "BxlKNWJfzXmNpooOQIrvfS".

BxlKNWJfzXmNpooOQIrvfS ha una sola I maiuscola, la parola di origine contiene due I maiuscole, come è possibile che la parola di origine sia contenuta nella seconda parola?

Forse non mi è chiaro il tema dell'esercizio.

Grazie,

cordiali saluti.

Matteo
m
matteo_dalessio (240 points)
0 0 2
commented Jan 23, 2020 by matteo_dalessio (240 points)
Proprio per superare i problemi delle lettere ripetute più volte all'interno delle parole ho provato prima a fare il confronto con un ciclo, rimuovendo di volta in volta le lettere trovate dalla seconda parola.

Ho provato anche ad usare il metodo .count(carattere) sulle due stringhe, confrontando i valori tornati.

Mi sembra che il confronto funzioni ma i tempi di esecuzione sono lunghi.

Matteo
andrea.sterbini (172780 points)
513 935 1789
commented Jan 23, 2020 by andrea.sterbini (172,780 points)
edited Jan 23, 2020 by andrea.sterbini
Guarda che il generatore NON E' DETTO che si trovi tra gli anagrammi. Le due parole che hai indicato evidentemente sono entrambe generate da BxlKNWJfzXmpooOQIrvfS.
m
matteo_dalessio (240 points)
0 0 2
commented Feb 4, 2020 by matteo_dalessio (240 points)
Grazie professore, ora credo di aver compreso meglio il testo dell'esercizio; continuo ad avere problemi con i tempi di esecuzione purtroppo.

Matteo
m
matteo_dalessio (240 points)
0 0 2
commented Feb 5, 2020 by matteo_dalessio (240 points)
Si, scrivo le linee ottenute formattandole secondo "k" nel file "ftesto_out" ricevuto come parametro.

Possono dipendere da questo i problemi con i tempi di esecuzione?

Al momento riesco a superare soltanto 4 test su 10.

Grazie,

Matteo
andrea.sterbini (172780 points)
513 935 1789
commented Feb 5, 2020 by andrea.sterbini (172,780 points)
Nel log dei test (se li esegui con la opzione --profile) vedi in quali funzioni si spende più tempo. Mi sembra strano che si tratti del salvataggio.

Inoltre se consegni ci posso dare un'occhiata.
m
m.lanzolla (700 points)
1 8 12
commented Apr 14, 2020 by m.lanzolla (700 points)
Salve,

anche io ho lo stesso problema, passo 4 test e tutti gli altri in timeout.

Ho provato ad allungare i tempi per controllare comunque se facevo bene ed effettivamente trovo i risultati giusti.

Questo è il mio ragionamento:

1) confronto tra loro tutte le stringhe a due a due.

2) per ridurre il numero di confronti, scelgo solo le coppie che hanno lo stesso numero di lettere o al più una in + o una in -.

3) trovata la coppia compatibile cerco quali sono le lettere in comune scorrendo lettera per lettera e segnando quelle in comune.

4) raccolgo i risultati in un dizionario e seleziono la coppia chiave valori con più valori.

Col "profile" vedo che a parte la lettura/scrittura dei file, il problema dei tempi è proprio la funzione che cerca il generatore al punto 3.

Non riesco a capire come ottimizzare la ricerca del generatore.
andrea.sterbini (172780 points)
513 935 1789
commented Apr 15, 2020 by andrea.sterbini (172,780 points)
Ci sono molte cose sulle quali si può ragionare.
Confronti due parole efficientemente?
Fai il minimo numero di confronti?
Come individui i generatori di un gruppo di parole?
Quali sono i possibili generatori di una parola?
...
f
federico_modesti (280 points)
0 1 3
commented Oct 5, 2020 by federico_modesti (280 points)
Buongiorno,

vorrei capire bene il funzionamento di questo homework perché, se provo a testare sul mio pc, i risultati ottenuti sono giusti ma quando provo a fare i test sul prompt mi da l'errore "IL RISULTATO PRODOTTO DEVE ESSERE UN INTERO".
Prof può farmi capire come mai viene fuori questo risultato se il testo che vado a scrivere nel file di output è corretto?
Inoltre, ad esempio nel file 'parole_2.txt' il risultato che deve generare è "baze bead beak beal"; all'interno del file non c'è un generatore che mi genera questa sequenza, perché se così fosse dovrebbe esistere la parola "bae" o "bea" che con una lettera aggiuntiva mi da questa sequenza.
Può farmi capire dove sta l'errore?
Grazie.
f
federico_modesti (280 points)
0 1 3
commented Oct 5, 2020 by federico_modesti (280 points)
Stessa cosa riguardo al file "parole_9990.txt', il risultato deve essere "dn na nd ng ns nt nv on" ma all'interno del testo non c'è un generatore che genera questi anagrammi...
Probabilmente non ho compreso bene il testo dell'esercizio, ma a rigor di logica mi viene da pensare questo.
Attendo un suo riscontro, grazie.

Saluti.
andrea.sterbini (172780 points)
513 935 1789
commented Oct 7, 2020 by andrea.sterbini (172,780 points)
1) il generatore non è detto che appaia nel file. Nel file possono esserci solo parole generate, tutte con un carattere im più

2) la funzione deve tornare un intero (e creare un file)
f
federico_modesti (280 points)
0 1 3
commented Oct 7, 2020 by federico_modesti (280 points)
Grazie professore..alla fine ho risolto!

Ora il problema sta nell'ottimizzare la funzione affinché non vada in Timeout Error...
T
Telradflap (1190 points)
0 0 1
commented Oct 19, 2020 by Telradflap (1,190 points)
sono uno studente del secondo anno, questo hw è ancora valido per recuperare l hw4 che mi è stato annullato?
andrea.sterbini (172780 points)
513 935 1789
commented Oct 22, 2020 by andrea.sterbini (172,780 points)
Certo.              .