Menu
Coddy logo textTech

מתזמן אירועים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Ruby של Coddy. שיעור 56 מתוך 57.

challenge icon

אתגר

קשה

בנו מתזמן אירועים באמצעות המתודות המיוחדות של היחידה הזאת. ל־Event.new(title, day, start, finish) יש קוראים לכל ארבעת הערכים. הוא כולל את Comparable וממיין לפי יום, אחר כך לפי שעת התחלה, ולבסוף לפי כותרת. שני אירועים שווים לפי ==, eql? ו־hash אם יש להם אותה כותרת באותו יום (אותו אירוע הוזן פעמיים). to_s מחזירה day 3 09-11 standup, עם שעות בעלות שתי ספרות. overlaps?(other) מחזירה אמת אם האירועים באותו יום וכל אחד מהם מתחיל לפני שהשני מסתיים. Scheduler#add(event) מחזירה duplicate עבור אירוע זהה, conflicts with review עבור האירוע הראשון שנשמר (לפי הסדר) שחופף לאירוע, ואם אין כזה, שומרת את האירוע ומחזירה added. Scheduler כוללת את Enumerable; המתודה each מניבה את האירועים השמורים לפי הסדר. busiest_day מחזירה busiest day 3: 5h עבור היום שבו נקבעו הכי הרבה שעות (היום המוקדם יותר במקרה של שוויון), או no events.

הקוד שסופק קורא אירועים משורות בפורמט title,day,start,finish ומדפיס את התשובה עבור כל אחד מהם, ואז כל אירוע לפי הסדר באמצעות each, ולבסוף את היום העמוס ביותר.

הקוד שלך ייכתב בקבצים event.rb ו־scheduler.rb. הקובץ main.rb מכיל את קוד הקלט/פלט שסופק, ואי אפשר לערוך אותו.

נסו בעצמכם

require_relative 'event'
require_relative 'scheduler'

# קוד הקלט/פלט שסופק: יש להשאיר אותו כפי שהוא
input = []
while (line = gets)
  input << line.chomp
end
scheduler = Scheduler.new
input.each do |line|
  title, day, start, finish = line.split(",")
  puts scheduler.add(Event.new(title, day.to_i, start.to_i, finish.to_i))
end
scheduler.each { |event| puts event }
puts scheduler.busiest_day

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר Ruby אונליין