Menu
Coddy logo textTech

חניון

חלק מהיחידה תכנות מונחה עצמים במסלול ה-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 אונליין