مسیرها
/
R
R
/
تمرین‌ها
/
فهرست پخش اوزان
فهرست پخش اوزان

فهرست پخش اوزان

تمرین یادگیری

مقدمه

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

آماده‌اید فهرست پخش اوزان را شروع کنید؟

در Exercism ثبت‌نام کنید تا R را همراه با 21 مفهوم111 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.