المسارات
/
Clojure
Clojure
/
التمارين
/
مراقب الطيور
مراقب الطيور

مراقب الطيور

تمرين تعلّمي

مقدمة

vector في Clojure هو مجموعة متتالية ومفهرسة وغير قابلة للتغيير، تتكوّن من صفر أو أكثر من القيم. وهذا يعني أنه بمجرد إنشاء المتجه، لا يمكن تعديله. الدوال التي تتعامل مع المتجهات ستُرجع متجهًا جديدًا، بينما يبقى المتجه الأصلي دون تغيير. وقد تكون القيم في المتجه من أنواع مختلفة. ويمكن تعريف المتجهات على النحو التالي:

(def empty [])
(def single-value [5])
(def single-value-alternative (vector 5))
(def three-values [1 "a" "b"])

يمكن استرجاع عناصر المتجه باستخدام فهرس. تعتمد متجهات Clojure على العدّ من الصفر، أي أن فهرس العنصر الأول يساوي صفرًا دائمًا:

(def numbers [2 3 5])
;; Read value from vector
(get numbers 2)
;;=> 5
;; Update value in vector
(assoc numbers 2 9)
;;=> [2 3 9]

يبقى المتجه الأصلي دون تغيير:

numbers
;;=> [2 3 5]

وللاحتفاظ بالقيمة المحدَّثة، نحتاج إما إلى تمريرها معنا أو حفظها في متغير:

(def updated-numbers
  (assoc numbers 2 9))
(get updated-numbers 2)
;;=> 9

التعليمات

أنت مراقب طيور شغوف يتتبّع عدد الطيور التي زارت حديقتك خلال الأيام السبعة الماضية.

لديك ست مهام، وكلها تتعلق بأعداد الطيور التي زارت حديقتك.

1. تحقق من الأعداد في الأسبوع الماضي

لأغراض المقارنة، تحتفظ دائمًا بنسخة من أعداد الأسبوع الماضي قريبة منك، وهي: 0، 2، 5، 3، 7، 8 و4. أنشئ متجهًا يحتوي على أعداد الأسبوع الماضي:

last-week
;;=> [0 2 5 3 7 8 4]

2. تحقق من عدد الطيور التي زارت اليوم

نفّذ الدالة today لتُرجع عدد الطيور التي زارت حديقتك اليوم. أعداد الطيور مرتبة حسب اليوم، إذ يمثل العنصر الأول عدد أقدم يوم، ويمثل العنصر الأخير عدد اليوم.

(def birds-per-day [2 5 0 7 4 1])
(today birds-per-day)
;;=> 1

3. زد عدد اليوم

نفّذ الدالة inc-bird لزيادة عدد اليوم:

(inc-bird birds-per-day)
;;=> [2 5 0 7 4 2]

4. تحقق مما إذا كان هناك يوم بلا طيور زائرة

نفّذ الدالة day-without-birds? التي تُرجع قيمة منطقية، فتُرجع true إذا كان هناك يوم لم تزر فيه أي طيور الحديقة، وإلا فتُرجع false:

(day-without-birds? birds-per-day)
;;=> true

5. احسب عدد الطيور الزائرة خلال أول عدد محدد من الأيام

نفّذ الدالة n-days-count التي تُرجع عدد الطيور التي زارت حديقتك من بداية الأسبوع، لكن اقتصر العدّ على عدد الأيام المحدد من بداية الأسبوع.

(n-days-count birds-per-day 4)
;;=> 14

6. احسب عدد الأيام المزدحمة

بعض الأيام أكثر ازدحامًا من غيرها. اليوم المزدحم هو الذي زارت فيه خمسة طيور أو أكثر حديقتك. نفّذ الدالة busy-days لتُرجع عدد الأيام المزدحمة:

(busy-days birds-per-day)
;;=> 2

7. تحقق من الأسبوع الفردي

خلال العام الماضي، وجدت أن بعض الأسابيع تُشكّل النمط الفردي نفسه، حيث تتناوب الأعداد بين طائر واحد وصفر من الطيور الزائرة. نفّذ الدالة odd-week? التي تُرجع true إذا طابق نمط أعداد الطيور لهذا الأسبوع النمط الفردي:

(odd-week? [1 0 1 0 1 0 1])
;;=> true
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Clojure Exercism

مستعد لبدء مراقب الطيور؟

سجّل في Exercism لتتعلّم وتتقن Clojure عبر 12 مفهومًا105 تمارين، وإرشاد بشري حقيقي، وكل ذلك مجانًا.