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

مجدول الفعاليات

جزء من قسم البرمجة كائنية التوجه في رحلة 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 عبر الإنترنت