[HOMEWORK] Homework 3 opzionale

andrea.sterbini (160900 points)
448 849 1643
asked Oct 29, 2020 in Avvisi by andrea.sterbini (160,900 points)
edited Oct 30, 2020 by andrea.sterbini

ATTENZIONE

  • eventuali correzioni verranno inserite qui
    •  l'esempio inserito nel testo dell'esercizio non è corretto, dovrebbe mostrare tutti i valori con frequenze da 1 in poi (n=20 è maggiore del numero di frequenze contate per cui dovevano apparire tutte). Fanno fede i test che contengono il numero di valori corretti nell'ordine giusto (gli N con frequenza maggiore, ordinati dal più piccolo al più grande).
  • NOTA: per eseguire i test SENZA i controlli ed il timeout modificate test_01.py settando la variabile DEBUG=True

Istruzioni

Per svolgere l'homework:

  • Installate le librerie necessarie
  • Scaricate il file HW3opt.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
      • un file di testo vuoto program01.txt in cui descrivere il vostro algoritmo
        • altre librerie e file necessari ad eseguire i test sulla vostra macchina
    • Posizionatevi nella directory HW3opt creata unzippando l'archivio ed rinominate il file program01.ita/eng.py che preferite con il nome program01.py
    • Editate il file program01.py implementando le funzioni necessarie a risolvere l'esercizio.
    • Editate il file program01.txt e descrivete l'algoritmo utilizzato nel vostro programma.
    • ATTENZIONE: nel file program01.txt NON inserite nè codice nè il vostro nome/id, deve restare anonimo.
    • 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 (test con una stampa dei tempi impiegati per eseguire ciascun test)
        • pytest test_01.py -v -rA --durations 0
      • oppure (test 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:
        • è 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: questo homework non ha scadenza

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

    Potete consegnare più volte, vale l'ultima.

    4 Answers

    9
    9Andrea9 (12340 points)
    10 30 55
    answered Oct 29, 2020 by 9Andrea9 (12,340 points)
    le librerie necessarie sono le stesse dello scorso Homework?

    nei prossimi Homework ne verranno inserite delle nuove ?
    MRinaudo (3660 points)
    18 39 50
    commented Oct 29, 2020 by MRinaudo (3,660 points)

    Penso proprio di sì  smiley.

    Sui prossimi Homework, non saprei.

    SimoneBd96 (2430 points)
    5 11 33
    commented Oct 29, 2020 by SimoneBd96 (2,430 points)
    Si sono le stesse. Quando e se serviranno, ce lo scriverà il prof sulla pagina dell'hmw vai tranquillo, buon lavoro collega!
    lcrainic (3320 points)
    2 4 25
    commented Oct 29, 2020 by lcrainic (3,320 points)
    Per ogni Homework il Professore  dirà se c'è il bisogno di installare altre librerie. Alla domanda se verranno inserite delle nuove nei prossimi homework, Sì molto probabilmente specialmente per gli ultimi due visto che si lavorerà con immagini da quello che avevo letto qui sul sito ( c'è una sezione dove puoi trovare gli argomenti di ogni Homework).
    1
    1914925 (3070 points)
    1 4 23
    answered Oct 29, 2020 by 1914925 (3,070 points)
    Ma cosa si intende per ordine lessicografico? Non penso di averlo capito ed una ricerca online non mi ha aiutato particolarmente ^^"
    O
    Oakandrew (6400 points)
    4 26 63
    commented Oct 29, 2020 by Oakandrew (6,400 points)

    ordine lessicografico è un ordine alfabetico.

    Esempio:

    0001->001->0010->100->1010

    si fa il confronto solo tra le cifre di ogni numero in esempio di sopra:

    0<1->dovremmo mettere prima {001 ,0001,0010} dopo {100 , 1010}

    poi prendiamo 001,0001,0010

    tra le seconde cifre non c'è la differenza in {001,0001,0010}

    tra terze invece si{001,0001,0011}, quindi-> [0001,001,0010]

    Dopodiché siamo sicuri che numero 0001 mettiamo prima degli altri
    ->facciamo il confronto tra 001 e 0010 ma siccome secondo numero ha piu cifre lo mettiamo dopo

    Dovresti procedere analogamente con i numeri che iniziano da 1 e unire due liste

    lcrainic (3320 points)
    2 4 25
    commented Oct 29, 2020 by lcrainic (3,320 points)
    Allora per ordine lessicografico si intende alfabeto, ovvero se hai  "albero" e "casa", verranno confrontate lettera per lettera in base all'ordinamento alfabetico, quindi in questo caso verrà prima "albero" (a precede c). Ora nel nostro caso non abbiamo lettere del alfabeto ma numeri. Quindi penso che il discorso si può applicare con i numeri interi.
    O
    Oakandrew (6400 points)
    4 26 63
    answered Oct 29, 2020 by Oakandrew (6,400 points)
    In primo test risultato "expected" uguale a [[1, ["1011", "1101"]], [2, ["0101", "0110", "1010"]],
                    [3, ["0111", "101", "1110", "1111"]], [4, ["0001", "0011", "1100"]],
                    [5, ["011", "1000", "110"]], [6, ["0000", "111"]], [7, ["0010", "1001"]],
                    [8, ["0100"]], [10, ["010"]], [11, ["000", "001", "11"]], [12, ["100"]],
                    [15, ["01", "10"]], [23, ["00"]]
                    ]

    Invece risultato in esempio è:

    [ (4, ['0001', '0011', '1100' ]),
          (5, ['011', 1000', '110' ]),
          (6, ['0000', '111']),
          (7, ['0010','1001' ]),
          (8, ['0100']),
          (10,['010']),
          (11,['000', '001', '11']),
          (12,['100']),
          (15,['01','10']),
          (23,['00'])
        ]

    E come la conseguenza mi fallisce il primo test
    SimoneModiga (3370 points)
    6 18 34
    commented Oct 30, 2020 by SimoneModiga (3,370 points)
    Ma questo perchè è sbagliato l'esempio? o perchè il parametro n deve essere 10 e non 20?

    Ho lo stesso problema non capisco se bisogna correggere i test.
    andrea.sterbini (160900 points)
    448 849 1643
    commented Oct 30, 2020 by andrea.sterbini (160,900 points)
    Avete ragione, mi sono dimenticato di correggere l'esempio (l'errore era stato segnalato già l'anno scorso)

    Ho aggiunto una nota sopra .
    G
    Giordano_Dionisi (3100 points)
    12 38 58
    commented Oct 30, 2020 by Giordano_Dionisi (3,100 points)
    Considera ho aperto un nuovo argomento anche io per questa ragione, non mi trovo con i risultati dell'esempio e con quelli della stringa ed effettivamente la stringa contiene anche la sottosequenza 101, tra le altre non citate dall'esempio
    M
    Michelangelo00 (1050 points)
    2 3 8
    commented Oct 30, 2020 by Michelangelo00 (1,050 points)
    una domanda, usi un particolare comando per contare le occorrenze nella stringa? perchè io uso il .count, conta ma per esempio il '00' invece di 23 volte me ne conta 16.
    G
    Giordano_Dionisi (3100 points)
    12 38 58
    commented Oct 30, 2020 by Giordano_Dionisi (3,100 points)
    Probabilmente non conti le sovrapposizioni

    Cioè se hai:

    1001110001

    Allora l'occorrenza 00 compare 3 volte e non 2 come ti darebbe il count... Non credo che il count sia il modo migliore per questo esercizio, altrimenti sarebbe troppo facile ahahahahah
    s
    stefanocali (1230 points)
    1 2 9
    answered Nov 1, 2020 by stefanocali (1,230 points)
    Scusate il punteggio per questo homework, non compare?
    Supero tutti i test.
    Grazie
    Fabioerpini (7970 points)
    5 9 27
    commented Nov 1, 2020 by Fabioerpini (7,970 points)
    Ciao, il punteggio non compare perché non è un Homework obbligatorio :)
    s
    stefanocali (1230 points)
    1 2 9
    commented Nov 1, 2020 by stefanocali (1,230 points)
    Grazie per la risposta!