Harmonogram wydarzeń
Część sekcji Programowanie obiektowe ścieżki Swift w Coddy. Lekcja 56 z 57.
Wyzwanie
TrudnyZbuduj harmonogram wydarzeń z użyciem standardowych protokołów. Event to struktura zawierająca title, day (1-31), start i end (godziny). Jest zgodna z protokołem Comparable (według dnia, następnie godziny rozpoczęcia, a potem tytułu), z protokołem Hashable oraz Equatable — porównanie uwzględnia tylko tytuł i dzień (to samo wydarzenie wprowadzone dwukrotnie) — a także z protokołem CustomStringConvertible, dzięki czemu jej opis ma postać day 3 09-11 standup. Klasa Scheduler ma metodę add(_:), która zwraca added, duplicate (ten sam tytuł tego samego dnia) lub conflicts with <title> (istniejące wydarzenie tego dnia, którego godziny pokrywają się z godzinami nowego: jedno zaczyna się przed końcem drugiego). Metoda agenda() zwraca posortowane wydarzenia, a busiestDay() zwraca busiest day 3: 5h lub no events.
Dostarczony kod odczytuje wydarzenia z wierszy w formacie title,day,start,end i wypisuje odpowiedź dla każdego z nich, a następnie agendę (jedno wydarzenie w każdym wierszu) i najbardziej pracowity dzień.
Umieść swój kod w plikach Event.swift i Scheduler.swift. Plik main.swift zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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())
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasMetody i selfInicjalizatoryKlasy są referencjamiPowtórzenie — karta biblioteczna4Hermetyzacja
Kontrola dostępuTylko do odczytu z zewnątrzOchrona stanuInicjalizatory, które mogą zawieśćPodsumowanie — konto bankowe7Polimorfizm i typy generyczne
PolimorfizmRzutowanie typówFunkcje generyczneTypy generycznePodsumowanie – kalkulator kształtów2Struktury i typy wartościowe
StrukturySemantyka wartościMetody modyfikująceStruktura czy klasaPodsumowanie – element inwentarza5Dziedziczenie
PodklasyPrzesłanianie metodInicjalizatory i superfinal i hierarchiePodsumowanie — hierarchia pracowników8Standardowe protokoły
CustomStringConvertibleEquatableComparableHashablePodsumowanie — własne sortowanie11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Swift