Διαδρομές
/
R
R
/
Ασκήσεις
/
Η Λίστα Αναπαραγωγής του Ozan
Η Λίστα Αναπαραγωγής του Ozan

Η Λίστα Αναπαραγωγής του Ozan

Άσκηση εκμάθησης

Εισαγωγή

Η R δεν διαθέτει ξεχωριστό τύπο δεδομένων για σύνολα, αλλά χρησιμοποιεί διάφορες συναρτήσεις για να εκτελεί παρόμοιες πράξεις σε διανύσματα.

Ο τελεστής %in% ελέγχει αν ένα στοιχείο ανήκει σε ένα σύνολο.

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

Στις σχετικές συναρτήσεις περιλαμβάνονται η unique (για την αφαίρεση των διπλότυπων), καθώς και οι union(), intersect(), setdiff() και setequal(), που εκτελούν πράξεις σε ζεύγη συνόλων.

> 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

Σε κάθε περίπτωση, οι set_1 και set_2 δεν αλλάζουν.

Οδηγίες

Ο Ozan ετοιμάζει μια λίστα αναπαραγωγής για ένα οδικό ταξίδι που πλησιάζει. Δεν θέλει να ακούσει το ίδιο κομμάτι δύο φορές, αλλά η λίστα αναπαραγωγής έχει γίνει τόσο μεγάλη που δυσκολεύεται να θυμηθεί ποια κομμάτια έχουν ήδη προστεθεί.

Το API της εφαρμογής μουσικής του Ozan ξέρει να δουλεύει μόνο με διανύσματα. Δεν είναι δυνατοί ρητοί βρόχοι ή λογική if/else. Χρειάζεται τη βοήθειά σου!

1. Αφαίρεσε τα διπλότυπα κομμάτια

Υλοποίησε τη συνάρτηση remove_duplicates, η οποία παίρνει μια λίστα αναπαραγωγής ως παράμετρο και επιστρέφει μια νέα λίστα αναπαραγωγής όπου όλα τα κομμάτια είναι μοναδικά.

> 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. Έλεγξε αν ένα κομμάτι έχει ήδη προστεθεί

Υλοποίησε τη συνάρτηση has_track, η οποία παίρνει μια λίστα αναπαραγωγής και ένα κομμάτι ως παραμέτρους και επιστρέφει ένα Boolean που δείχνει αν η λίστα αναπαραγωγής περιέχει το κομμάτι.

> 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. Πρόσθεσε κομμάτια

Υλοποίησε τη συνάρτηση add_tracks, η οποία παίρνει μια λίστα αναπαραγωγής και ένα διάνυσμα με ένα ή περισσότερα κομμάτια ως παραμέτρους και επιστρέφει μια νέα λίστα αναπαραγωγής που περιλαμβάνει τα κομμάτια.

> 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. Διάγραψε κομμάτια

Υλοποίησε τη συνάρτηση delete_tracks, η οποία παίρνει μια λίστα αναπαραγωγής και ένα ή περισσότερα κομμάτια ως παραμέτρους και επιστρέφει μια νέα λίστα αναπαραγωγής που δεν περιλαμβάνει τα κομμάτια.

> 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. Σύγκρινε λίστες αναπαραγωγής

Ο Ozan γνωρίζει έναν νέο φίλο και αναρωτιέται πόσο μοιάζουν τα γούστα τους. Υλοποίησε τη συνάρτηση find_common_tracks, η οποία παίρνει δύο λίστες αναπαραγωγής και επιστρέφει μια νέα λίστα αναπαραγωγής που περιέχει μόνο τα κομμάτια που υπάρχουν και στις δύο.

> 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"
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
R Exercism

Έτοιμος να ξεκινήσεις την άσκηση Η Λίστα Αναπαραγωγής του Ozan;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις R με 21 έννοιες111 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.