Menu
Coddy logo textTech

Estacionamento

Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 55 de 57.

challenge icon

Desafio

Difícil

Construa uma garagem.

  • O enum Size contém SMALL, MEDIUM e LARGE, nessa ordem, cada um com um label em letras minúsculas.
  • Vehicle(plate) é uma classe selada com as propriedades abstratas size e hourlyRate. Motorbike é pequena (1 por hora), Car é média (3) e Van é grande (5).
  • Garage(small, medium, large) é criada com o número de vagas por tamanho. park(vehicle) coloca o veículo em uma vaga livre do próprio tamanho ou, se não houver nenhuma, do próximo tamanho maior que tenha uma vaga, e responde parked AB12 in medium, full for AB12 ou AB12 is already parked. leave(plate, hours) libera a vaga e responde AB12 paid 9 (valor por hora vezes o número de horas, no mínimo 1 hora) ou no vehicle AB12. status() responde free: small 1, medium 0, large 2.

O código fornecido lê as vagas como small,medium,large, depois os comandos park car AB12 (bike, car ou van), leave AB12 3 ou status, e imprime cada resposta.

Seu código deve ficar em Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt e Garage.kt. Main.kt contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

fun main() {
    // Código de entrada/saída fornecido: mantenha-o como está
    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())
        }
    }
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Playground de Kotlin