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

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

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

challenge icon

التحدي

صعب

أنشئ مرآبًا للسيارات. تخزّن Vehicle قيمة plate؛ وتعرّف فئاته الفرعية size وhourly_rate: حجم Motorbike هو 1 (صغير) بسعر 1 لكل ساعة، وحجم Car هو 2 (متوسط) بسعر 3، وحجم Van هو 3 (كبير) بسعر 5. ثابت المرآب SIZES هو %w[small medium large]. تستقبل Garage.new(small, medium, large) عدد الأماكن لكل حجم. تضع park(vehicle) مركبةً في مكان شاغر من حجمها، أو من الحجم الأكبر التالي إذا لم يتوفر مكان، وتعيد 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، ويطبع كل رد.

يجب أن تضع كودك في vehicle.rb وmotorbike.rb وcar.rb وvan.rb وgarage.rb. يحتوي main.rb على كود الإدخال/الإخراج المزوّد، ولا يمكن تعديله.

جرّب بنفسك

require_relative 'vehicle'
require_relative 'motorbike'
require_relative 'car'
require_relative 'van'
require_relative 'garage'

# كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
input = []
while (line = gets)
  input << line.chomp
end
small, medium, large = input[0].split(",").map(&:to_i)
garage = Garage.new(small, medium, large)
kinds = { "bike" => Motorbike, "car" => Car, "van" => Van }
input.drop(1).each do |cmd|
  parts = cmd.split
  case parts[0]
  when "park" then puts garage.park(kinds[parts[1]].new(parts[2]))
  when "leave" then puts garage.leave(parts[1], parts[2].to_i)
  else puts garage.status
  end
end

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

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