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

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

جزء من قسم البرمجة كائنية التوجه في رحلة R على Coddy. الدرس 55 من 57.

challenge icon

التحدي

صعب

أنشئ مرآبًا للسيارات. يعرّف Vehicle.R الفئة الافتراضية S4 Vehicle (الفتحة plate)، والأنواع العامة size_rank(v) وrate(v)، والأسماء SIZES: ‏small وmedium وlarge للرتب 1 و2 و3.

  • في Motorbike.R وCar.R وVan.R، تُعرَّف الفئات؛ أضف أساليبها: للدراجة النارية الرتبة 1 وتدفع 1 لكل ساعة، وللسيارة الرتبة 2 وتدفع 3 لكل ساعة، وللشاحنة الصغيرة الرتبة 3 وتدفع 5 لكل ساعة.
  • في Garage.R، أكمل الفئة المرجعية Garage. يحتوي حقلها free على الأماكن الشاغرة لكل رتبة، بينما parked قائمة مفهرسة حسب لوحة المركبة. يأخذ park(v) مكانًا شاغرًا من رتبة المركبة نفسها، أو من الرتبة الأكبر التالية إذا لم يتوفر مكان، ويُرجع parked AB12 in medium أو full for AB12 أو AB12 is already parked. يحرر leave(plate, hours) المكان ويُرجع AB12 paid 9 (السعر مضروبًا في عدد الساعات، بحد أدنى ساعة واحدة) أو no vehicle AB12. يُرجع status() ‏free: small 1, medium 0, large 2; parked: 1.

يقرأ الكود الم provided الأماكن الشاغرة بالترتيب small,medium,large، ثم الأوامر park car AB12 ‏(bike أو car أو van)، أو leave AB12 3، أو status، ويطبع كل رد.

يجب أن تضع كودك في Vehicle.R وMotorbike.R وCar.R وVan.R وGarage.R. يحتوي main.R على كود الإدخال/الإخراج الم provided ولا يمكن تعديله.

جرّب بنفسك

source("Vehicle.R")
source("Motorbike.R")
source("Car.R")
source("Van.R")
source("Garage.R")

# كود الإدخال/الإخراج المُقدَّم: أبقِه كما هو
input <- suppressWarnings(readLines(file("stdin")))
garage <- Garage$new(free = as.numeric(strsplit(input[1], ",")[[1]]))
for (line in input[-1]) {
  p <- strsplit(line, " ")[[1]]
  reply <- switch(p[1],
    park = garage$park(switch(p[2],
      bike = new("Motorbike", plate = p[3]),
      car = new("Car", plate = p[3]),
      van = new("Van", plate = p[3]))),
    leave = garage$leave(p[2], as.numeric(p[3])),
    status = garage$status())
  cat(reply, "\n", sep = "")
}

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

تدرّب بنفسك: مترجم R عبر الإنترنت