Menu
Coddy logo textTech

Парковочный гараж

Часть раздела Объектно-ориентированное программирование путешествия по Swift на Coddy. Урок 55 из 57.

challenge icon

Задание

Сложно

Создайте парковочный гараж. Протокол Vehicle содержит plate, size (перечисление Size: Int, Comparable со значениями small = 1, medium = 2, large = 3) и hourlyRate. Реализуйте Motorbike (малый, 1 в час), Car (средний, 3) и Van (большой, 5). Класс Garage создаётся с указанием количества мест каждого размера. park(_:) помещает транспортное средство на свободное место соответствующего размера или, если свободных мест нет, на место следующего большего размера и возвращает parked AB12 in medium или full for AB12. leave(plate:hours:) освобождает место и возвращает AB12 paid 9 (тариф, умноженный на количество часов, но минимум за 1 час) или no vehicle AB12. status() возвращает free: small 1, medium 0, large 2.

Предоставленный код считывает количество мест в формате small,medium,large, затем команды park car AB12, leave AB12 3 или status и выводит каждый ответ.

Ваш код должен находиться в файлах Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift и Garage.swift. Файл main.swift содержит предоставленный код ввода/вывода, и его нельзя редактировать.

Попробуйте сами

// Предоставленный код ввода/вывода: оставьте его как есть
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())
    }
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Песочница Swift