Menu
Coddy logo textTech

Parkhaus

Teil des Abschnitts Objektorientierte Programmierung der Swift-Journey von Coddy. Lektion 55 von 57.

challenge icon

Aufgabe

Schwer

Erstelle ein Parkhaus. Das Protokoll Vehicle besitzt plate, size (eine Aufzählung Size: Int, Comparable mit small = 1, medium = 2, large = 3) und hourlyRate. Implementiere Motorbike (klein, 1 pro Stunde), Car (mittel, 3) und Van (groß, 5). Die Klasse Garage wird mit einer Anzahl von Stellplätzen pro Größe erstellt. park(_:) stellt ein Fahrzeug auf einen freien Stellplatz seiner eigenen Größe oder, falls keiner frei ist, auf einen der nächstgrößeren Größe und antwortet mit parked AB12 in medium oder full for AB12. leave(plate:hours:) gibt den Stellplatz frei und antwortet mit AB12 paid 9 (Tarif mal Stunden, mindestens 1 Stunde) oder no vehicle AB12. status() antwortet mit free: small 1, medium 0, large 2.

Der bereitgestellte Code liest die Stellplätze als small,medium,large ein, anschließend die Befehle park car AB12, leave AB12 3 oder status, und gibt jede Antwort aus.

Dein Code gehört in Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift und Garage.swift. main.swift enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

// Bereitgestellter Ein-/Ausgabecode: belasse ihn wie er ist
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())
    }
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Swift-Playground