Menu
Coddy logo textTech

Parking

Fait partie de la section Programmation orientée objet du Journey Swift de Coddy. Leçon 55 sur 57.

challenge icon

Défi

Difficile

Construisez un garage de stationnement. Le protocole Vehicle possède plate, size (une énumération Size: Int, Comparable avec small = 1, medium = 2, large = 3) et hourlyRate. Implémentez Motorbike (petit, 1 par heure), Car (moyen, 3) et Van (grand, 5). La classe Garage est créée avec un nombre de places pour chaque taille. park(_:) place un véhicule dans une place libre de sa propre taille ou, si aucune n’est libre, dans une place de la taille immédiatement supérieure, et renvoie parked AB12 in medium ou full for AB12. leave(plate:hours:) libère la place et renvoie AB12 paid 9 (tarif multiplié par le nombre d’heures, au moins 1 heure), ou no vehicle AB12. status() renvoie free: small 1, medium 0, large 2.

Le code fourni lit les places sous la forme small,medium,large, puis les commandes park car AB12, leave AB12 3 ou status, et affiche chaque réponse.

Votre code doit se trouver dans Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift et Garage.swift. main.swift contient le code fourni pour les entrées et les sorties et ne peut pas être modifié.

Essayez vous-même

// Code d'entrée/sortie fourni : le laisser tel quel
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())
    }
}

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Playground Swift