Menu
Coddy logo textTech

Récapitulatif - Gardien de zoo

Fait partie de la section Programmation orientée objet du Journey Kotlin de Coddy. Leçon 31 sur 57.

challenge icon

Défi

Moyen

Planifiez une journée au zoo.

  • Animal(name, kg) est abstraite et possède les membres abstraits species, food et dailyGrams(), ainsi qu’une méthode line() qui renvoie Leo the lion: 5700 g meat.
  • Lion mange de la viande, à raison de 30 g par kg. Parrot mange des graines, 50 g par jour quel que soit son poids. Seal mange du poisson, à raison de 40 g par kg.
  • L’interface Trainable possède trick(). Les perroquets (Polly says hello) et les phoques (Sammy balances a ball) sont entraînables ; les lions ne le sont pas.
  • L’extension List<Animal>.foodTotals() renvoie les grammes par aliment, les aliments étant classés par ordre alphabétique : fish 4000, meat 5700.
  • showLineup(animals) renvoie les tours des animaux entraînables dans l’ordre, en utilisant une vérification de type, ou no show lorsqu’il n’y en a aucun.

Le code fourni lit les lignes lion,Leo,190, parrot,Polly,1 ou seal,Sammy,100 et affiche chaque line(), puis food: avec les totaux et une ligne show: pour chaque tour renvoyé.

Votre code doit être placé dans Animal.kt, Trainable.kt, Lion.kt, Parrot.kt, Seal.kt et Functions.kt. Main.kt contient le code d’entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

fun main() {
    // Code d'entrée/sortie fourni : le garder tel quel
    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")
}

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Playground Kotlin