Парковочный гараж
Часть раздела Объектно-ориентированное программирование путешествия по Swift на Coddy. Урок 55 из 57.
Задание
СложноСоздайте парковочный гараж. Протокол 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())
}
}
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовМетоды и selfИнициализаторыКлассы — это ссылкиПовторение — читательский билет4Инкапсуляция
Контроль доступаТолько чтение извнеЗащита состоянияИнициализаторы с возможностью сбояПовторение — банковский счёт7Полиморфизм и обобщения
ПолиморфизмПриведение типовОбобщённые функцииОбобщённые типыПовторение — калькулятор фигур10Паттерны проектирования. Часть 2
Паттерн делегированияПаттерн декораторПаттерн строительПаттерн состояния2Структуры и типы-значения
СтруктурыСемантика значенийИзменяющие методыСтруктура или классПовторение — элемент инвентаря5Наследование
ПодклассыПереопределение методовИнициализаторы и superfinal и иерархииПовторение — иерархия сотрудников8Стандартные протоколы
CustomStringConvertibleEquatableComparableHashableПовторение — пользовательская сортировка11Проект: Управление библиотекой
Книги и читателиВыдача книгПотренируйтесь самостоятельно: Песочница Swift