Parcours
/
R
R
/
Exercices
/
Playlist d'Ozan
Playlist d'Ozan

Playlist d'Ozan

Exercice d'apprentissage

Introduction

R ne dispose pas d'un type de données ensemble à part entière ; il utilise à la place diverses fonctions pour effectuer des opérations similaires sur des vecteurs.

L'opérateur %in% teste l'appartenance à un ensemble.

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

Parmi les fonctions utiles, on trouve unique (pour supprimer les doublons), ainsi que union(), intersect(), setdiff() et setequal(), qui opèrent sur des paires d'ensembles.

> 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

Dans chaque cas, set_1 et set_2 restent inchangés.

Instructions

Ozan prépare une playlist pour un road trip à venir. Il ne veut pas écouter la même piste deux fois, mais la playlist est devenue si longue qu'il a du mal à se rappeler quelles pistes ont déjà été ajoutées.

L'API du lecteur de musique d'Ozan ne sait travailler qu'avec des vecteurs. Aucune boucle explicite ni logique if/else n'est possible. Il a besoin de ton aide !

1. Supprime les pistes en double

Implémente la fonction remove_duplicates, qui prend une playlist en paramètre et renvoie une nouvelle playlist dont toutes les pistes sont uniques.

> 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. Vérifie si une piste a déjà été ajoutée

Implémente la fonction has_track, qui prend une playlist et une piste en paramètres et renvoie un booléen qui indique si la playlist contient la piste.

> 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. Ajoute des pistes

Implémente la fonction add_tracks, qui prend une playlist et un vecteur d'une ou plusieurs pistes en paramètres et renvoie une nouvelle playlist qui contient les pistes.

> 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. Supprime des pistes

Implémente la fonction delete_tracks, qui prend une playlist et une ou plusieurs pistes en paramètres et renvoie une nouvelle playlist qui ne contient pas les pistes.

> 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. Compare les playlists

Ozan rencontre un nouvel ami et se demande à quel point leurs goûts se ressemblent. Implémente la fonction find_common_tracks, qui prend deux playlists et renvoie une nouvelle playlist qui ne contient que les pistes présentes dans les deux.

> 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"
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
R Exercism

Prêt à commencer Playlist d'Ozan ?

Inscris-toi sur Exercism pour apprendre et maîtriser R avec 21 concepts111 exercices, et un vrai mentorat humain, le tout gratuitement.