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

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

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

مقدمه

آرایه

در Ruby، آرایه‌ها مجموعه‌هایی مرتب و ایندکس‌شده با اعداد صحیح از هر نوع شیء هستند. ایندکس‌گذاری در آرایه از 0 شروع می‌شود. ایندکس منفی نسبت به انتهای آرایه در نظر گرفته می‌شود؛ برای مثال، ایندکس -1 به آخرین عنصر آرایه اشاره می‌کند، -2 به عنصر ماقبل آخر و به همین ترتیب.

ساخت آرایه‌ها

آرایه‌ها معمولاً با نشانه‌گذاری [] ساخته می‌شوند. می‌توانند هر نوع شیء متفاوتی را در خود داشته باشند.

array = [1, "two", 3.0]

دسترسی به عنصر

می‌توان عناصر یک آرایه را با استفاده از متد #[] و بر اساس ایندکس‌شان بازیابی کرد. این متد عنصر موجود در آن ایندکس را برمی‌گرداند، یا زیرآرایه‌ای را برمی‌گرداند که از ایندکس شروع آغاز می‌شود و به اندازه‌ی طول مشخصی ادامه می‌یابد. ایندکس‌های منفی از انتهای آرایه به عقب شمرده می‌شوند.

a = [ "a", "b", "c", "d", "e" ]

a[2]       #=> "c"
a[6]       #=> nil
a[1, 3]    #=> [ "b", "c", "d" ]

a[-1]      #=> "e"
a[-2]      #=> "d"
a[-3, 2]   #=> ["c", "d"]

متدهای کمکی

متدهای کمکی مفید زیادی روی آرایه‌ها وجود دارد. در ادامه برخی از رایج‌ترین آن‌ها را می‌بینید:

fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]

fibonacci.size      #=> 8
fibonacci.sum       #=> 33
fibonacci.reverse   #=> [13, 8, 5, 3, 2, 1, 1, 0]

شمارش

به‌جای اینکه برای پیمایش مجموعه‌ها از حلقه‌ها استفاده کنیم، در Ruby از شمارش بهره می‌بریم.

شمارش، عملِ گام‌برداشتن در یک مجموعه (در این مورد، یک آرایه) و انجام دادن کاری روی هر شیء است. شمارش مفهومی کلیدی در Ruby است و برای کارهایی مانند مرتب‌سازی، گروه‌بندی، نگاشت، کاهش و بسیاری موارد دیگر به کار می‌رود.

یک شمارش برای چاپ هر کلمه در یک آرایه به این صورت خواهد بود:

words = ["the", "cat", "sat"]
words.each do |word|
  puts word
end

# Output:
# the
# cat
# sat

در این مثال، متد .each را روی آرایه‌ی خود فراخوانی کرده‌ایم و یک «بلوک» را به آن داده‌ایم که یک پارامتر (word) می‌گیرد و آن را چاپ می‌کند.

بعداً در این مسیر با جزئیات بسیار بیشتری به بلوک‌ها می‌پردازیم، اما فعلاً آن‌ها را توابع بی‌نامی در نظر بگیرید که می‌توانند صفر یا چند آرگومان بگیرند. می‌توان آن‌ها را با نحوه‌ی نگارش do...end (بالا) یا با {} (پایین) تعریف کرد.

در ادامه چند مثال دیگر از متدهای آرایه که از بلوک استفاده می‌کنند را می‌بینید:

fibonacci = [0, 1, 1, 2, 3, 5, 8, 13]

fibonacci.count  { |number| number == 1 }   #=> 2
fibonacci.any?   { |number| number == 6 }   #=> false
fibonacci.select { |number| number.odd? }   #=> [1, 1, 3, 5, 13]
fibonacci.all?   { |number| number < 20 }   #=> true
fibonacci.map    { |number| number * 2  }   #=> [0, 2, 2, 4, 6, 10, 16, 26]

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

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

پنج وظیفه دارید که همه‌شان به شمار پرنده‌هایی مربوط می‌شوند که به باغتان آمده‌اند.

1. بررسی کنید شمارش‌های هفته‌ی گذشته چه بوده‌اند

برای مقایسه، همیشه نسخه‌ای از شمارش‌های هفته‌ی گذشته را کنار دستتان نگه می‌دارید که عبارت‌اند از: 0، 2، 5، 3، 7، 8 و 4. متد BirdCount.last_week را پیاده‌سازی کنید که شمارش‌های هفته‌ی گذشته را برمی‌گرداند:

BirdCount.last_week
# => [0, 2, 5, 3, 7, 8, 4]

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

متد BirdCount#yesterday را پیاده‌سازی کنید تا برگرداند که دیروز چند پرنده به باغتان آمده است. شمارش پرنده‌ها بر اساس روز مرتب شده است؛ اولین عنصر شمارش قدیمی‌ترین روز است و آخرین عنصر شمارش امروز.

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.yesterday
# => 4

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

متد BirdCount#total را پیاده‌سازی کنید تا شمار کل پرنده‌هایی را برگرداند که به باغتان آمده‌اند:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.total
# => 19

4. محاسبه‌ی تعداد روزهای پرمشغله

بعضی روزها پرمشغله‌تر از بقیه‌اند. روزی که پنج پرنده یا بیشتر به باغتان آمده باشد، «روز پرمشغله» نامیده می‌شود. متد BirdCount#busy_days را پیاده‌سازی کنید تا تعداد روزهای پرمشغله را برگرداند:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.busy_days
# => 2

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

متد BirdCount#day_without_birds? را پیاده‌سازی کنید که اگر روزی بوده است که هیچ پرنده‌ای به باغ نیامده باشد true برمی‌گرداند؛ در غیر این صورت false را برگردانید:

birds_per_day = [2, 5, 0, 7, 4, 1]
bird_count = BirdCount.new(birds_per_day)
bird_count.day_without_birds?
# => true
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Ruby Exercism

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

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