Menu
Coddy logo textTech

イベントスケジューラー

CoddyのRubyジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 56/57。

challenge icon

チャレンジ

難しい

このセクションの特殊メソッドを使ってイベントスケジューラーを作成してください。Event.new(title, day, start, finish)には、4つすべてのリーダーがあります。Comparableをインクルードし、日、開始時刻、タイトルの順で並べます。同じ日に同じタイトルを持つ2つのイベント(同じイベントが2回入力された場合)は、==、eql?、hashにおいて等しいものとします。to_sは、時刻を2桁で表示したday 3 09-11 standupを返します。overlaps?(other)は、同じ日にあり、それぞれの開始時刻が相手の終了時刻より前である場合にtrueになります。Scheduler#add(event)は、等しいイベントに対してduplicateを返し、重複する最初の格納済みイベント(順序どおり)に対してconflicts with reviewを返します。それ以外の場合はイベントを格納してaddedを返します。SchedulerはEnumerableをインクルードし、そのeachは格納されたイベントを順番にyieldします。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オンラインコンパイラ