المسارات
/
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، التي تأخذ قائمة تشغيل ومقطعًا بوصفهما معاملين و_تُرجع_ قيمة منطقية تشير إلى ما إذا كانت قائمة التشغيل تحتوي على المقطع.

> 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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.