عدّ الطيور

عدّ الطيور

تمرين تعلّمي

مقدمة

الاستدعاء الذاتي

الدوال الاستدعائية الذاتية هي دوال تستدعي نفسها.

تحتاج الدالة الاستدعائية الذاتية إلى حالة أساسية واحدة على الأقل وإلى حالة استدعائية واحدة على الأقل.

تُرجع الحالة الأساسية قيمة دون أن تستدعي الدالة مرة أخرى. أما الحالة الاستدعائية فتستدعي الدالة مرة أخرى، مع تعديل المدخل بحيث يطابق الحالة الأساسية في مرحلة ما.

غالبًا ما تُكتب كل حالة في جملة خاصة بها من جمل الدالة.

# 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. إذا كانت المصفوفة فارغة، فيجب أن تُرجع [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 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.