Track
/
R
R
/
Esercizi
/
La playlist di Ozan
La playlist di Ozan

La playlist di Ozan

Esercizio di apprendimento

Introduzione

R non ha un tipo di dato Set separato: usa invece diverse funzioni per eseguire operazioni simili sui vettori.

L'operatore %in% verifica l'appartenenza a un insieme.

2 %in% 1:10 # TRUE
12 %in% 1:10 # FALSE

Tra le funzioni rilevanti ci sono unique (per rimuovere i duplicati), oltre a union(), intersect(), setdiff() e setequal() per operare su coppie di insiemi.

> set_1 <- c("a", "b", "c", "b", "a")
> unique(set_1) # deduplicate
[1] "a" "b" "c"

> set_2 <- c('a', "c", "d")
> union(set_1, set_2) # values in either set
[1] "a" "b" "c" "d"

> intersect(set_1, set_2) # values in both sets
[1] "a" "c"

> setdiff(set_1, set_2) # values in set_1 but not set_2
[1] "b"

> setdiff(set_2, set_1) # values in set_2 but not set_1
[1] "d"

setequal(set_1, c("c", "b", "a", "b")) # are elements the same after deduplication?
[1] TRUE

In ogni caso, set_1 e set_2 restano invariati.

Istruzioni

Ozan sta mettendo insieme una playlist per un prossimo viaggio su strada. Non vuole ascoltare lo stesso brano più di una volta, ma la playlist è diventata così lunga che ormai ha difficoltà a ricordare quali brani ha già aggiunto.

L'API del lettore musicale di Ozan sa lavorare solo con i vettori. Non sono possibili cicli espliciti né logica if/else. Ha bisogno del tuo aiuto!

1. Rimuovi i brani duplicati

Implementa la funzione remove_duplicates, che prende una playlist come parametro e restituisce una nuova playlist in cui tutti i brani sono unici.

> playlist <- c(
  "Court and Spark - Joni Mitchell",
  "Big Yellow Taxi - Joni Mitchell",
  "Court and Spark - Joni Mitchell"
)

> remove_duplicates(playlist)
[1] "Court and Spark - Joni Mitchell" "Big Yellow Taxi - Joni Mitchell"

2. Controlla se un brano è già stato aggiunto

Implementa la funzione has_track, che prende una playlist e un brano come parametri e restituisce un booleano che indica se la playlist contiene il brano.

> playlist <- c(
  "The Fashion Show - Grace Jones",
  "Dr. Funkenstein - Parliament"
)

> has_track(playlist, "Dr. Funkenstein - Parliament")
[1] TRUE

> has_track(playlist, "Walking in the Rain - Grace Jones")
[1] FALSE

3. Aggiungi i brani

Implementa la funzione add_tracks, che prende una playlist e un vettore di uno o più brani come parametri e restituisce una nuova playlist che include i brani.

> playlist <- c("Selma - Bijelo Dugme")

> playlist <- add_tracks(playlist, "Atomic Dog - George Clinton")
> playlist
[1] "Selma - Bijelo Dugme"   "Atomic Dog - George Clinton"

> add_tracks(playlist, "Selma - Bijelo Dugme")
[1] "Selma - Bijelo Dugme"   "Atomic Dog - George Clinton"

> add_tracks(playlist, c("The Chain - Fleetwood Mac", "Selma - Bijelo Dugme"))
[1] "Selma - Bijelo Dugme"   "Atomic Dog - George Clinton" "The Chain - Fleetwood Mac"  

4. Elimina i brani

Implementa la funzione delete_tracks, che prende una playlist e uno o più brani come parametri e restituisce una nuova playlist che non include i brani.

> playlist <- c(
  "The Treasure - Fra Lippo Lippi",
  "After the Fall - Klaus Nomi"
)

> playlist <- delete_tracks(playlist, "The Treasure - Fra Lippo Lippi")
> playlist
[1] "After the Fall - Klaus Nomi"

> delete_tracks(playlist, "I Feel the Magic - Belinda Carlisle")
[1] "After the Fall - Klaus Nomi"

5. Confronta le playlist

Ozan conosce un nuovo amico e si chiede quanto simili siano i loro gusti. Implementa la funzione find_common_tracks, che prende due playlist e restituisce una nuova playlist contenente solo i brani presenti in entrambe.

> playlist_1 <- c("Karma - Taylor Swift", "Tired - Adele")
> playlist_2 <- c("Andromeda - Weyes Blood", "Karma - Taylor Swift")
> find_common_tracks(playlist_1, playlist_2)
[1] "Karma - Taylor Swift"
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
R Exercism

Vuoi iniziare La playlist di Ozan?

Iscriviti a Exercism per imparare e padroneggiare R con 21 concetti111 esercizi e il mentoring di persone reali, tutto gratis.