Menu
Coddy logo textTech

Estacionamento

Parte da seção Programação Orientada a Objetos do Journey de Swift da Coddy. Lição 55 de 57.

challenge icon

Desafio

Difícil

Construa uma garagem. O protocolo Vehicle tem plate, size (um enum Size: Int, Comparable com small = 1, medium = 2, large = 3) e hourlyRate. Implemente Motorbike (pequena, 1 por hora), Car (médio, 3) e Van (grande, 5). A classe Garage é criada com uma quantidade de vagas por tamanho. park(_:) coloca um veículo em uma vaga livre do seu próprio tamanho ou, se nenhuma estiver livre, do próximo tamanho maior, e responde parked AB12 in medium ou full for AB12. leave(plate:hours:) libera a vaga e responde AB12 paid 9 (tarifa vezes horas, no mínimo 1 hora), ou no vehicle AB12. status() responde free: small 1, medium 0, large 2.

O código fornecido lê as vagas como small,medium,large, depois os comandos park car AB12, leave AB12 3 ou status, e imprime cada resposta.

Seu código deve estar em Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift e Garage.swift. main.swift contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

// Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação Orientada a Objetos

Pratique por conta própria: Playground de Swift