Menu
Coddy logo textTech

Parcheggio multipiano

Fa parte della sezione Programmazione orientata agli oggetti del percorso Kotlin di Coddy. Lezione 55 di 57.

challenge icon

Sfida

Difficile

Crea un garage.

  • L'enum Size contiene SMALL, MEDIUM e LARGE, in quest'ordine, ciascuno con un label in minuscolo.
  • Vehicle(plate) è una classe sealed con le proprietà astratte size e hourlyRate. Motorbike è piccolo (1 all'ora), Car è medio (3) e Van è grande (5).
  • Garage(small, medium, large) viene creato indicando il numero di posti per ogni dimensione. park(vehicle) mette il veicolo in un posto libero della sua dimensione oppure, se non ce ne sono, in uno della dimensione immediatamente superiore che ne abbia uno, e restituisce parked AB12 in medium, full for AB12 oppure AB12 is already parked. leave(plate, hours) libera il posto e restituisce AB12 paid 9 (tariffa moltiplicata per le ore, almeno 1 ora), oppure no vehicle AB12. status() restituisce free: small 1, medium 0, large 2.

Il codice fornito legge i posti nel formato small,medium,large, poi i comandi park car AB12 (bike, car oppure van), leave AB12 3 o status, e stampa ogni risposta.

Il tuo codice va inserito in Size.kt, Vehicle.kt, Motorbike.kt, Car.kt, Van.kt e Garage.kt. Main.kt contiene il codice di input/output fornito e non può essere modificato.

Provalo tu

fun main() {
    // Codice di input/output fornito: lascialo così com'è
    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())
        }
    }
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Playground Kotlin