Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مرآب السيارات

جزء من قسم البرمجة كائنية التوجه في رحلة 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 (السعر مضروبًا في عدد الساعات، بحد أدنى ساعة واحدة)، أو 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())
    }
}

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: Playground لـ Swift