Menu
Coddy logo textTech

Парковочный гараж

Часть раздела Объектно-ориентированное программирование путешествия по Kotlin на Coddy. Урок 55 из 57.

challenge icon

Задание

Сложно

Создай парковочный гараж.

  • Перечисление Size содержит SMALL, MEDIUM и LARGE в таком порядке, каждое со строчной label.
  • Vehicle(plate) — запечатанный класс с абстрактными свойствами size и hourlyRate. Motorbike имеет малый размер (1 в час), Car — средний (3), а Van — большой (5).
  • Garage(small, medium, large) создаётся с указанием количества мест каждого размера. park(vehicle) помещает транспортное средство на свободное место своего размера или, если такого нет, на место следующего большего размера, если оно есть, и возвращает parked AB12 in medium, full for AB12 или AB12 is already parked. leave(plate, hours) освобождает место и возвращает AB12 paid 9 (тариф, умноженный на количество часов, но минимум за 1 час) или no vehicle AB12. status() возвращает free: small 1, medium 0, large 2.

Предоставленный код считывает места в формате small,medium,large, затем команды park car AB12 (bike, car или van), leave AB12 3 или status и выводит каждый ответ.

Твой код должен находиться в файлах Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt и Garage.kt. В Main.kt находится предоставленный код ввода-вывода, и его нельзя редактировать.

Попробуйте сами

fun main() {
    // Предоставленный код ввода/вывода: оставьте его как есть
    val input = generateSequence(::readLine).toList()
    val (small, medium, large) = input[0].split(",").map { it.toInt() }
    val garage = Garage(small, medium, large)
    for (cmd in input.drop(1)) {
        val p = cmd.split(" ")
        when (p[0]) {
            "park" -> {
                val vehicle = when (p[1]) {
                    "bike" -> Motorbike(p[2])
                    "van" -> Van(p[2])
                    else -> Car(p[2])
                }
                println(garage.park(vehicle))
            }
            "leave" -> println(garage.leave(p[1], p[2].toInt()))
            else -> println(garage.status())
        }
    }
}

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

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