Rutas
/
R
R
/
Ejercicios
/
La lista de reproducción de Ozan
La lista de reproducción de Ozan

La lista de reproducción de Ozan

Ejercicio de aprendizaje

Introducción

R no tiene un tipo de dato Set propio, sino que usa una variedad de funciones para realizar operaciones similares sobre vectores.

El operador %in% comprueba la pertenencia a un conjunto.

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

Entre las funciones relevantes están unique (para eliminar duplicados) y también union(), intersect(), setdiff() y setequal(), que operan sobre pares de conjuntos.

> 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

En todos los casos, set_1 y set_2 permanecen sin cambios.

Instrucciones

Ozan está preparando una lista de reproducción para un próximo viaje por carretera. No quiere escuchar la misma canción más de una vez, pero la lista se ha vuelto tan larga que ya le cuesta recordar qué canciones ha añadido ya.

La API del reproductor de música de Ozan solo sabe trabajar con vectores. No es posible usar bucles explícitos ni lógica if/else. ¡Necesita tu ayuda!

1. Elimina las canciones duplicadas

Implementa la función remove_duplicates, que toma una lista de reproducción como parámetro y devuelve una nueva lista en la que todas las canciones son únicas.

> 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. Comprueba si una canción ya se ha añadido

Implementa la función has_track, que toma una lista de reproducción y una canción como parámetros y devuelve un Boolean que indica si la lista contiene la canción.

> 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. Añade canciones

Implementa la función add_tracks, que toma una lista de reproducción y un vector de una o más canciones como parámetros y devuelve una nueva lista de reproducción que incluye esas canciones.

> 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 canciones

Implementa la función delete_tracks, que toma una lista de reproducción y una o más canciones como parámetros y devuelve una nueva lista de reproducción que no incluye esas canciones.

> 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. Compara listas de reproducción

Ozan conoce a un nuevo amigo y se pregunta cuánto se parecen sus gustos musicales. Implementa la función find_common_tracks, que toma dos listas de reproducción y devuelve una nueva lista que contiene solo las canciones presentes en ambas.

> 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"
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
R Exercism

¿Listo para empezar La lista de reproducción de Ozan?

Regístrate en Exercism para aprender y dominar R con 21 conceptos111 ejercicios y mentoría humana real, todo gratis.