Menu
CoddyTech

Nhà để xe

Thuộc phần Lập trình hướng đối tượng trong hành trình Swift của Coddy. Bài học 55 trên 57.

challenge icon

Thử thách

Khó

Hãy xây dựng một nhà để xe. Giao thức Vehicle có plate, size (một enum Size: Int, Comparable với small = 1, medium = 2, large = 3) và hourlyRate. Hãy triển khai Motorbike (cỡ nhỏ, 1 mỗi giờ), Car (cỡ vừa, 3) và Van (cỡ lớn, 5). Lớp Garage được tạo với số chỗ đỗ cho từng cỡ. park(_:) đưa xe vào chỗ trống có cùng cỡ hoặc, nếu không còn chỗ, vào chỗ trống có cỡ lớn hơn tiếp theo, rồi trả về parked AB12 in medium hoặc full for AB12. leave(plate:hours:) giải phóng chỗ đỗ rồi trả về AB12 paid 9 (đơn giá nhân số giờ, tối thiểu 1 giờ) hoặc no vehicle AB12. status() trả về free: small 1, medium 0, large 2.

Code được cung cấp đọc số chỗ theo thứ tự small,medium,large, sau đó đọc các lệnh park car AB12, leave AB12 3 hoặc status và in ra từng phản hồi.

Hãy viết code trong các tệp Size.swift, Vehicle.swift, Motorbike.swift, Car.swift, Van.swift và Garage.swift. main.swift chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.

Tự làm thử

// Đoạn code đầu vào/đầu ra đã được cung cấp: giữ nguyên
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())
    }
}

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Playground Swift