活动安排器
本课属于 Coddy Ruby 学习旅程的“面向对象编程”单元。第 56 课,共 57 课。
挑战
困难使用本单元的特殊方法构建一个日程安排器。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 在线编译器