Menu
Coddy logo textTech

Garage di parcheggio

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

challenge icon

Sfida

Difficile

Crea un garage. Il protocollo Vehicle ha plate, size (un’enumerazione Size: Int, Comparable con small = 1, medium = 2, large = 3) e hourlyRate. Implementa Motorbike (piccola, 1 all’ora), Car (media, 3) e Van (grande, 5). La classe Garage viene creata con un numero di posti per ogni dimensione. park(_:) mette un veicolo in un posto libero della sua stessa dimensione o, se non ce ne sono, della dimensione immediatamente superiore, e risponde parked AB12 in medium oppure full for AB12. leave(plate:hours:) libera il posto e risponde AB12 paid 9 (tariffa moltiplicata per le ore, almeno 1 ora), oppure no vehicle AB12. status() risponde free: small 1, medium 0, large 2.

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

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

Provalo tu

// Codice di input/output fornito: lascialo così com'è
var input: [String] = []
while let line = readLine() { input.append(line) }
let s = input[0].split(separator: ",").map { Int($0)! }
let garage = Garage(small: s[0], medium: s[1], large: s[2])
for cmd in input.dropFirst() {
    let p = cmd.split(separator: " ").map(String.init)
    switch p[0] {
    case "park":
        let v: any Vehicle
        switch p[1] {
        case "bike": v = Motorbike(plate: p[2])
        case "van": v = Van(plate: p[2])
        default: v = Car(plate: p[2])
        }
        print(garage.park(v))
    case "leave": print(garage.leave(plate: p[1], hours: Int(p[2])!))
    default: print(garage.status())
    }
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Playground Swift