مسیرها
/
Elixir
Elixir
/
تمرین‌ها
/
شمارش پرندگان
شمارش پرندگان

شمارش پرندگان

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

مقدمه

بازگشت

توابع بازگشتی توابعی هستند که خودشان را فراخوانی می‌کنند.

یک تابع بازگشتی باید دست‌کم یک «حالت پایه» و دست‌کم یک «حالت بازگشتی» داشته باشد.

«حالت پایه» مقداری را برمی‌گرداند بدون اینکه تابع را دوباره فراخوانی کند. «حالت بازگشتی» تابع را دوباره فراخوانی می‌کند و ورودی را طوری تغییر می‌دهد که در نقطه‌ای با حالت پایه مطابقت پیدا کند.

بسیار پیش می‌آید که هر حالت در «بند تابع» خودش نوشته می‌شود.

# base case
def count([]), do: 0

# recursive case
def count([_head | tail]), do: 1 + count(tail)

دستورالعمل‌ها

شما یک پرنده‌نگار پرشور هستید که شمار پرنده‌هایی را که هر روز به باغتان می‌آیند پیگیری می‌کنید.

تصمیم گرفته‌اید پرنده‌نگری‌تان را به سطح تازه‌ای ببرید و چند ابزار پیاده‌سازی کنید که در پیگیری و پردازش داده‌ها به شما کمک می‌کنند.

انتخاب کرده‌اید که داده‌ها را به شکل فهرستی از اعداد صحیح ذخیره کنید. اولین عدد در فهرست، شمار پرندگانی است که امروز به باغتان آمده‌اند؛ دومین عدد مربوط به دیروز است و به همین ترتیب.

1. بررسی کنید امروز چند پرنده آمده است

تابع BirdCount.today/1 را پیاده‌سازی کنید. این تابع باید فهرستی از شمار روزانه‌ی پرنده‌ها بگیرد و شمار امروز را برگرداند. اگر فهرست خالی باشد، باید nil را برگرداند.

BirdCount.today([2, 5, 1])
# => 2

2. شمار امروز را افزایش دهید

تابع BirdCount.increment_day_count/1 را پیاده‌سازی کنید. این تابع باید فهرستی از شمار روزانه‌ی پرنده‌ها بگیرد و شمار امروز را یک واحد افزایش دهد. اگر فهرست خالی باشد، [1] را برگردانید.

BirdCount.increment_day_count([4, 0, 2])
# => [5, 0, 2]

3. بررسی کنید روزی بدون پرنده وجود داشته است یا نه

تابع BirdCount.has_day_without_birds?/1 را پیاده‌سازی کنید. این تابع باید فهرستی از شمار روزانه‌ی پرنده‌ها بگیرد. اگر حداقل یک روز بوده باشد که هیچ پرنده‌ای به باغ نیامده است، باید true را برگرداند، و در غیر این صورت false را.

BirdCount.has_day_without_birds?([2, 0, 4])
# => true

BirdCount.has_day_without_birds?([3, 8, 1, 5])
# => false

4. شمار کل پرنده‌های آمده را محاسبه کنید

تابع BirdCount.total/1 را پیاده‌سازی کنید. این تابع باید فهرستی از شمار روزانه‌ی پرنده‌ها بگیرد و شمار کل پرندگانی را برگرداند که از زمانی که جمع‌آوری داده‌ها را شروع کرده‌اید به باغتان آمده‌اند.

BirdCount.total([4, 0, 9, 0, 5])
# => 18

5. شمار روزهای پرمشغله را محاسبه کنید

بعضی روزها پرمشغله‌تر از بقیه هستند. روز پرمشغله روزی است که پنج پرنده یا بیشتر به باغتان آمده باشند.

تابع BirdCount.busy_days/1 را پیاده‌سازی کنید. این تابع باید فهرستی از شمار روزانه‌ی پرنده‌ها بگیرد و شمار روزهای پرمشغله را برگرداند.

BirdCount.busy_days([4, 5, 0, 0, 6])
# => 2
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Elixir Exercism

آماده‌اید شمارش پرندگان را شروع کنید؟

در Exercism ثبت‌نام کنید تا Elixir را همراه با 58 مفهوم168 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.