Tracks
/
R
R
/
Übungen
/
Ozans Playlist
Ozans Playlist

Ozans Playlist

Lernübung

Einführung

R hat keinen eigenen Datentyp für Mengen, sondern verwendet eine Reihe von Funktionen, um ähnliche Operationen auf Vektoren auszuführen.

Der Operator %in% prüft die Zugehörigkeit zu einer Menge.

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

Zu den relevanten Funktionen gehören unique (zum Entfernen von Duplikaten) sowie union(), intersect(), setdiff() und setequal(), mit denen du auf Mengenpaaren arbeitest.

> 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 jedem Fall bleiben set_1 und set_2 unverändert.

Anleitung

Ozan stellt eine Playlist für einen bevorstehenden Roadtrip zusammen. Er möchte keinen Track mehr als einmal hören, aber die Playlist ist inzwischen so lang geworden, dass er Mühe hat, sich zu merken, welche Tracks schon hinzugefügt wurden.

Die API von Ozans Musikplayer kann nur mit Vektoren umgehen. Explizite Schleifen oder if/else-Logik sind nicht möglich. Er braucht deine Hilfe!

1. Doppelte Tracks entfernen

Implementiere die Funktion remove_duplicates, die eine Playlist als Parameter entgegennimmt und eine neue Playlist zurückgibt, in der alle Tracks eindeutig sind.

> 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. Prüfen, ob ein Track bereits hinzugefügt wurde

Implementiere die Funktion has_track, die eine Playlist und einen Track als Parameter entgegennimmt und einen booleschen Wert zurückgibt, der angibt, ob die Playlist den Track enthält.

> 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. Tracks hinzufügen

Implementiere die Funktion add_tracks, die eine Playlist und einen Vektor aus einem oder mehreren Tracks als Parameter entgegennimmt und eine neue Playlist zurückgibt, die diese Tracks enthält.

> 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. Tracks löschen

Implementiere die Funktion delete_tracks, die eine Playlist und einen oder mehrere Tracks als Parameter entgegennimmt und eine neue Playlist zurückgibt, die diese Tracks nicht enthält.

> 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. Playlists vergleichen

Ozan lernt einen neuen Freund kennen und fragt sich, wie ähnlich sich ihre Geschmäcker sind. Implementiere die Funktion find_common_tracks, die zwei Playlists entgegennimmt und eine neue Playlist zurückgibt, die nur die Tracks enthält, die in beiden vorkommen.

> 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"
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
R Exercism

Bereit, mit Ozans Playlist zu starten?

Melde dich bei Exercism an, um R mit 21 Konzepte111 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.