Menu
Coddy logo textTech

Repaso: cuidador del zoológico

Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 31 de 57.

challenge icon

Desafío

Intermedio

Planifica un día en el zoológico.

  • Animal(name, kg) es abstracta y tiene los miembros abstractos species, food y dailyGrams(), además de un método line() que devuelve Leo the lion: 5700 g meat.
  • Lion come carne, 30 g por kg. Parrot come semillas, 50 g al día independientemente de cuánto pese. Seal come pescado, 40 g por kg.
  • La interfaz Trainable tiene trick(). Los loros (Polly says hello) y las focas (Sammy balances a ball) se pueden entrenar; los leones no.
  • La extensión List<Animal>.foodTotals() devuelve los gramos por alimento, con los alimentos en orden alfabético: fish 4000, meat 5700.
  • showLineup(animals) devuelve los trucos de los animales entrenables en orden, usando una comprobación de tipo, o no show cuando no hay ninguno.

El código proporcionado lee las líneas lion,Leo,190, parrot,Polly,1 o seal,Sammy,100 e imprime cada line(), después food: con los totales y una línea show: por cada truco devuelto.

Tu código va en Animal.kt, Trainable.kt, Lion.kt, Parrot.kt, Seal.kt y Functions.kt. Main.kt contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

fun main() {
    // Código de entrada/salida suministrado: déjalo como está
    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")
}

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Playground de Kotlin