イベントスケジューラー
CoddyのRubyジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 56/57。
チャレンジ
難しいこのセクションの特殊メソッドを使ってイベントスケジューラーを作成してください。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オンラインコンパイラ