TdP-prove-finali / Introduzione

Istruzioni e documentazione per la proposta e lo svolgimento delle prove finali relative al corso di Tecniche di Programmazione.
http://bit.ly/tecn-progr
Apache License 2.0
4 stars 13 forks source link

Sviluppo di un software per la gestione di una 24-hour Readathon #84

Closed cmmedoro closed 2 years ago

cmmedoro commented 2 years ago

Studente proponente

s271882 Medoro Carla Maria

Titolo della proposta

Sviluppo di un software per la gestione di una 24-hour Readathon

Descrizione del problema proposto

Una 24-hour Readathon è una “gara” che i lettori ingaggiano con se stessi, nata nel 2007, che tutt’oggi viene ripetuta due volte l’anno, con l’obiettivo di impiegare quanto più tempo possibile delle 24 ore nella lettura, al fine di sgravare la propria TBR (To Be Read list). I lettori possono decidere di partecipare a questa gara, seguendo, se stabilite, alcune regole, oppure di creare la propria Readathon in autonomia. Per aiutare il lettore a scegliere quali libri leggere, avendo come fine quello di massimizzare il numero di libri letti nel tempo dedicato e cercando di minimizzare il tempo “avanzante”, durante il quale non è possibile iniziare un nuovo libro per la Readathon perché non verrebbe completato in tempo, svilupperò un’applicazione in cui l’utente-lettore dovrà specificare, per esempio, il numero di pagine che è in grado di leggere mediamente in un’ora, il numero di ore in cui non sarà impegnato nella lettura, i generi che preferisce, il numero minimo e massimo di pagine che i libri devono avere. Qualora la soluzione proposta sia di proprio gradimento, questa verrà accettata e i libri verranno inseriti nell’elenco dei libri letti, così che in iterazioni successive non vengano più presi in considerazione. Immaginando che l’utente debba eventualmente comprare questi libri, può chiedere che la soluzione venga elaborata sulla base di un proprio budget. Sarà anche possibile una semplice ricerca di libri in base a titolo, autore e genere.

Descrizione della rilevanza gestionale del problema

Il problema è rilevante da un punto di vista gestionale, in quanto si tratta di un problema di ottimizzazione. L’applicazione aiuta l’utente a ottimizzare il tempo a disposizione per effettuare questa Readathon grazie alla proposta di una soluzione personalizzata, ovvero il massimo numero di libri che potranno essere letti, ma soprattutto completati, impiegando così al massimo il tempo a disposizione e rispettando una serie di parametri specificati in input dall’utente. Inoltre, l’applicazione sarà in grado di fornire una soluzione al problema sulla base di un ulteriore vincolo di budgeting, nel caso in cui l’utente abbia intenzione di acquistare i libri da leggere.

Descrizione dei data-set per la valutazione

Per lo sviluppo dell’applicazione verrà utilizzato un dataset preso dal sito Kaggle: https://www.kaggle.com/datasets/canggih/goodreads-choice-awards-20112020?select=data-total.csv. Questo dataset si basa su dati ottenuti a loro volta da Amazon e Goodreads, una piattaforma dove i lettori possono segnare i libri letti, quelli in lettura e quelli che vorrebbero leggere, scrivere recensioni e interagire con la comunità. In particolare, i libri sono stati prelevati a partire dalla lista di libri candidati ai Goodreads Choice Awards, fra il 2011 (prima edizione di questi “premi”) e il 2020 (penultima edizione), e per ognuno di essi sono stati estratti una serie di dati e associati ad altrettanti dati dalle pagine Amazon dei libri. Questo dataset verrà opportunamente ripulito e adattato, in quanto presenta righe errate e dati mancanti, e infine verrà convertito da file .csv in file .sql, per poterlo installare su HeidiSQL.

Descrizione preliminare degli algoritmi coinvolti

In prima istanza, l’applicazione implementerà un semplice algoritmo di ricerca per trovare una lista di libri appartenenti a un dato genere, selezionato appositamente dall’utente, una lista di libri scritti da un certo autore e un libro il cui titolo corrisponda a quello passato come parametro (o più di uno, nel caso in cui ci siano più libri con lo stesso titolo); sarà possibile anche effettuare una ricerca combinata fra genere e autore. La funzionalità principale dell’applicazione sarà quella di utilizzare un algoritmo ricorsivo per fornire al lettore una lista di libri che potranno essere letti e completati nell’arco di tempo che l’utente ha a disposizione, sulla base di vincoli impostabili in input. In particolare, fra i vincoli più importanti per l’elaborazione corretta di una soluzione ci sono il numero di pagine che l’utente è in grado di leggere mediamente in un’ora, le ore da non considerare per la challenge (l’utente potrebbe avere degli impegni o voler dedicarsi ad altro, e non esclusivamente a leggere per 24 ore), una serie di generi a cui questi libri devono appartenere e il numero minimo e massimo di pagine che il lettore vuole che questi libri abbiano. I libri, inoltre, vengono selezionati fra quelli che l’utente non ha ancora letto. Opzionalmente, potranno essere introdotti altri parametri come il numero medio di rating minimo, il numero minimo di libri (ad esempio, se l’utente ha tanti libri nella sua TBR potrebbe voler cercare di leggerne il più possibile, quindi inserire un numero minimo potrebbe aiutare) ed eventualmente anche una lista di autori, qualora l’utente voglia fare una maratona di libri dello stesso autore o voglia leggere quelli dei suoi autori preferiti, anche per essere sicuro che gli piacciano e che riesca a leggerli volentieri. Sarà eventualmente possibile implementare lo stesso algoritmo ricorsivo aggiungendo come obiettivo quello di generare una soluzione al problema che soddisfi un ulteriore vincolo, il budget, specificato in input dall’utente, immaginando che egli abbia la necessità di acquistare i libri e che questi non siano già presenti nella propria libreria.

Descrizione preliminare delle funzionalità previste per l’applicazione software

L’interfaccia grafica si comporrà di tre principali sezioni. Nella prima, l’utente potrà scegliere se vuole semplicemente ricercare un libro oppure se vuole che il programma gli suggerisca quali libri leggere per la Readathon. Scegliendo la prima opzione, si aprirà una finestra dove saranno implementati i vari tipi di ricerca, quello in base al genere, all’autore e al titolo di un libro; i risultati di queste ricerche saranno forniti in un’apposita area e sulla base di questi potranno essere calcolate alcune statistiche. Scegliendo invece la seconda, si aprirà un’altra finestra in cui l’utente potrà inserire tutti i vincoli che riterrà necessario affinché l’applicazione restituisca una lista di libri validi. Avrà anche la possibilità di “accettare” la soluzione proposta, inserendo così questi libri nella lista dei propri libri letti, in modo tale che a una successiva iterazione dell’algoritmo questi non siano più presi in considerazione. Nella stessa finestra, infine, l’utente potrà specificare un budget e farsi generare una soluzione che contenga una serie di libri che, oltre a rispettare tutti gli altri vincoli, non superino questo budget.

fulcorno commented 2 years ago

La proposta è pertinente e di rilevanza gestionale. È anche un'idea carina ed originale. La proposta è approvata. Le funzionalità di ricerca di un libro potrebbe non essere implementata, la cosa importante è il calcolo dei suggerimenti.