Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - حارس حديقة الحيوانات

جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 31 من 57.

challenge icon

التحدي

متوسط

خطّط ليوم في حديقة الحيوانات.

  • ‏Animal(name, kg) صنف مجرد يحتوي على الأعضاء المجردة species وfood وdailyGrams()، وعلى أسلوب line() يعيد Leo the lion: 5700 g meat.
  • ‏Lion يأكل اللحم بمقدار 30 غ لكل كغ. أما Parrot فيأكل البذور بمقدار 50 غ يوميًا مهما كان وزنه. وSeal يأكل السمك بمقدار 40 غ لكل كغ.
  • ‏تحتوي الواجهة Trainable على trick(). الببغاوات (Polly says hello) والفقمات (Sammy balances a ball) قابلة للتدريب؛ أما الأسود فليست كذلك.
  • ‏يعيد الامتداد List<Animal>.foodTotals() عدد الغرامات لكل نوع من الطعام، مع ترتيب الأطعمة أبجديًا: fish 4000, meat 5700.
  • ‏يعيد showLineup(animals) حيل الحيوانات القابلة للتدريب بالترتيب، باستخدام فحص للنوع، أو no show عندما لا توجد حيوانات قابلة للتدريب.

يقرأ الكود المزوَّد الأسطر lion,Leo,190 أو parrot,Polly,1 أو seal,Sammy,100، ويطبع كل line()، ثم food: مع الإجماليات، وسطر show: واحدًا لكل حيلة مُعادة.

ضع الكود الخاص بك في Animal.kt وTrainable.kt وLion.kt وParrot.kt وSeal.kt وFunctions.kt. يحتوي Main.kt على كود الإدخال/الإخراج المزوَّد، ولا يمكن تعديله.

جرّب بنفسك

fun main() {
    // كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
    val input = generateSequence(::readLine).toList()
    val animals = input.map { line ->
        val (kind, name, kg) = line.split(",")
        when (kind) {
            "lion" -> Lion(name, kg.toInt())
            "parrot" -> Parrot(name, kg.toInt())
            else -> Seal(name, kg.toInt())
        }
    }
    for (a in animals) println(a.line())
    println("food: " + animals.foodTotals())
    for (s in showLineup(animals)) println("show: $s")
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: Playground لـ Kotlin