Soptyfive Wrapped P46295


Statement
 

pdf   zip

thehtml

Soptyfive és una plataforma mundialment coneguda per escoltar música en streaming. Tu treballes al seu Departament de Dades i, com cada any, toca oferir als usuaris un resum de les cançons i artistes que més han escoltat. Per fer el resum (també conegut com a Soptyfive Wrapped) et demanen poder veure tres mètriques:

  • Total de minuts escoltats per usuari (arrodonits a la baixa).
  • 5 artistes més escoltats per usuari.
  • 5 cançons més escoltades per usuari.

Considerem que l’artista més escoltat és aquell que ha estat escoltat durant més temps i considerarem la cançó més escoltada és aquella que ha estat escoltada més vegades (independentment de la seva duració).

Entrada

Considereu que l’entrada és un únic cas per un sol usuari. Aquesta consisteix en un enter n seguit d’una seqüència d’n cançons, representades pel nom de la cançó, l’autor, el nombre de cops que l’usuari l’ha escoltat durant l’any, i la durada de la cançó (en segons). Per simplificar, els noms de les cançons i artistes no contenen espais. Després de les cançons poden venir entre una i tres línies amb un text indicant quina mètrica es vol veure:

  • minutes indica que s’ha de dir el nombre de minuts.
  • artists indica que s’han de dir els 5 artistes més escoltats.
  • songs indica que s’han de dir les 5 cançons més escoltades.

Podeu assumir que sempre hi ha 5 o més cançons diferents, i 5 o més artistes diferents a l’entrada.

Sortida

La sortida del programa ha de ser fins a tres línies indicant quants minuts de música ha escoltat l’usuari, els 5 artistes més escoltats i les 5 cançons més escoltades. Seguiu el patró de la mostra, i recordeu calcular només les mètriques que es demanen.

Observació

L’ordre de les 5 cançons i artistes va en funció d’una mètrica numèrica, en cas d’empat, utilitzeu l’ordre lexicogràfic.

Definiu una estructura Song per desar les cançons que es llegeixen i tres funcions per obtenir la sortida que es demana. Les funcions poden ser així:

def sum_minutes(songs: list[Song]) -> int:
    """
    Calcula quants minuts s'han escoltat en total, 
    donada una llista de cançons.
    """

def compute_top_artists(songs: list[Song]) -> list[str]:
    """
    Calcula els 5 artistes més escoltats dins la llista de cançons.    
    Precondició: hi ha 5 o més artistes diferents.
    """

def compute_top_songs(songs: list[Song]) -> list[str]:
    """
    Calcula les 5 cançons que més cops s'han escoltat de la llista de cançons.
    Precondició: hi ha 5 o més cançons diferents.
    """

El Jutge dóna puntuacions parcials indicatives per a cada funció i per als jocs de proves públics, però l’avaluació va a càrrec del professor.

Public test cases
  • Input

    11
    canco01 artista1 5 10
    canco02 artista1 10 4
    canco03 artista1 10 75
    
    canco04 artista2 20 100
    canco05 artista2 10 7
    canco06 artista2 10 100
    canco07 artista2 10 6
    
    canco08 artista3 1 10
    
    canco09 artista4 10 50
    
    canco10 artista5 30 100
    
    canco11 artista6 15 10
    
    minutes
    

    Output

    Total de minuts escoltats: 127
    
  • Input

    11
    canco01 artista1 5 10
    canco02 artista1 10 4
    canco03 artista1 10 75
    
    canco04 artista2 20 100
    canco05 artista2 10 7
    canco06 artista2 10 100
    canco07 artista2 10 6
    
    canco08 artista3 1 10
    
    canco09 artista4 10 50
    
    canco10 artista5 30 100
    
    canco11 artista6 15 10
    
    
    artists
    

    Output

    Top 5 artists: artista2 artista5 artista1 artista4 artista6
    
  • Input

    11
    canco01 artista1 5 10
    canco02 artista1 10 4
    canco03 artista1 10 75
    
    canco04 artista2 20 100
    canco05 artista2 10 7
    canco06 artista2 10 100
    canco07 artista2 10 6
    
    canco08 artista3 1 10
    
    canco09 artista4 10 50
    
    canco10 artista5 30 100
    
    canco11 artista6 15 10
    
    songs

    Output

    Top 5 songs: canco10 canco04 canco11 canco02 canco03
    
  • Input

    11
    canco01 artista1 5 10
    canco02 artista1 10 4
    canco03 artista1 10 75
    
    canco04 artista2 20 100
    canco05 artista2 10 7
    canco06 artista2 10 100
    canco07 artista2 10 6
    
    canco08 artista3 1 10
    
    canco09 artista4 10 50
    
    canco10 artista5 30 100
    
    canco11 artista6 15 10
    
    minutes
    artists
    songs

    Output

    Total de minuts escoltats: 127
    Top 5 artists: artista2 artista5 artista1 artista4 artista6
    Top 5 songs: canco10 canco04 canco11 canco02 canco03
    
  • Information
    Author
    Jordi Puig
    Language
    Catalan
    Official solutions
    Python
    User solutions
    Python