Menu
Coddy logo textTech

イベントスケジューラー

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

challenge icon

チャレンジ

難しい

標準プロトコルを使用してイベントスケジューラーを構築してください。Event は、title、day(1-31)、start、end の時間を持つ構造体です。Comparable(日、次に開始時間、次にタイトルの順)、Hashable、およびタイトルと日だけで判定する Equatable(同じイベントが2回入力された場合)に準拠し、CustomStringConvertible として day 3 09-11 standup の形式になります。Scheduler クラスには add(_:) があり、added、duplicate(同じ日に同じタイトル)、または conflicts with <title>(その日に存在するイベントと時間が重複している場合。片方がもう片方の終了前に開始する)を返します。agenda() はイベントをソートして返し、busiestDay() は busiest day 3: 5h または no events を返します。

提供されたコードは、イベントを title,day,start,end 形式の行として読み込み、それぞれの応答を出力します。その後、予定表(1行につき1イベント)と最も忙しい日を出力します。

コードは Event.swift と Scheduler.swift に記述してください。main.swift には提供された入力/出力コードが含まれており、編集できません。

自分で試してみよう

// 提供された入出力コード: そのままにしておく
var input: [String] = []
while let line = readLine() { input.append(line) }
let scheduler = Scheduler()
for line in input {
    let p = line.split(separator: ",").map(String.init)
    print(scheduler.add(Event(title: p[0], day: Int(p[1])!, start: Int(p[2])!, end: Int(p[3])!)))
}
for e in scheduler.agenda() { print(e) }
print(scheduler.busiestDay())

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Swiftプレイグラウンド