Menu
Coddy logo textTech

Estacionamiento

Parte de la sección Programación orientada a objetos del Journey de Swift de Coddy. Lección 55 de 57.

challenge icon

Desafío

Difícil

Construye un garaje de estacionamiento. El protocolo Vehicle tiene plate, size (una enumeración Size: Int, Comparable con small = 1, medium = 2, large = 3) y hourlyRate. Implementa Motorbike (pequeña, 1 por hora), Car (mediano, 3) y Van (grande, 5). La clase Garage se crea con un número de plazas por tamaño. park(_:) coloca un vehículo en una plaza libre de su propio tamaño o, si no hay ninguna libre, de la siguiente talla mayor, y responde parked AB12 in medium o full for AB12. leave(plate:hours:) libera la plaza y responde AB12 paid 9 (tarifa multiplicada por las horas, como mínimo 1 hora), o no vehicle AB12. status() responde free: small 1, medium 0, large 2.

El código proporcionado lee las plazas como small,medium,large, después los comandos park car AB12, leave AB12 3 o status, e imprime cada respuesta.

Tu código va en Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift y Garage.swift. main.swift contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

// Código de entrada/salida suministrado: déjalo tal como está
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())
    }
}

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Playground de Swift