عدّ الطيور

عدّ الطيور

تمرين تعلّمي

مقدمة

المصفوفات

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