Menu
Coddy logo textTech

Повторение — смотритель зоопарка

Часть раздела Объектно-ориентированное программирование путешествия по 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")
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Песочница Kotlin