Harmonogram wydarzeń
Część sekcji Programowanie obiektowe ścieżki Ruby w Coddy. Lekcja 56 z 57.
Wyzwanie
TrudnyZbuduj harmonogram wydarzeń, korzystając ze specjalnych metod z tej sekcji. Event.new(title, day, start, finish) udostępnia czytniki dla wszystkich czterech pól. Miesza moduł Comparable i porządkuje wydarzenia według dnia, następnie godziny rozpoczęcia, a na końcu tytułu. Dwa wydarzenia są równe według ==, eql? i hash, gdy mają ten sam tytuł tego samego dnia (to samo wydarzenie dodane dwukrotnie). to_s zwraca day 3 09-11 standup, z godzinami zapisanymi za pomocą dwóch cyfr. overlaps?(other) zwraca prawdę, jeśli wydarzenia są tego samego dnia i każde z nich rozpoczyna się przed zakończeniem drugiego. Scheduler#add(event) zwraca duplicate dla równego wydarzenia, conflicts with review dla pierwszego zapisanego wydarzenia (w kolejności), z którym występuje nakładanie, a w przeciwnym razie zapisuje je i zwraca added. Scheduler dołącza moduł Enumerable; jego metoda each przekazuje zapisane wydarzenia w kolejności. busiest_day zwraca busiest day 3: 5h dla dnia z największą liczbą zaplanowanych godzin (w przypadku remisu wybiera wcześniejszy dzień) albo no events.
Dostarczony kod odczytuje wydarzenia z wierszy w formacie title,day,start,finish i wyświetla odpowiedź dla każdego z nich, a następnie wszystkie wydarzenia w kolejności za pomocą each oraz najbardziej obciążony dzień.
Umieść swój kod w plikach event.rb i scheduler.rb. Plik main.rb zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
require_relative 'event'
require_relative 'scheduler'
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasZmienne instancjiMetody i selfto_s i inspectPowtórzenie – karta biblioteczna4Hermetyzacja
Metody prywatneMetody chronionePrywatne setteryOchrona stanuPowtórzenie – automat vendingowy7Polimorfizm i typowanie kacze
PolimorfizmTypowanie kaczeMetody abstrakcyjnecase i klasyPowtórzenie – metody płatności10Wzorce projektowe, część 2
Delegowanie z ForwardableWzorzec dekoratoraWzorzec budowniczegoWzorzec stanu2Metody dostępowe i self
Gettery i setteryWłasne setteryself w metodachTożsamość i równośćPowtórzenie – lista kontaktów5Dziedziczenie
PodklasyNadpisywanie metodWywoływanie superis_a? i przodkowiePowtórka – lista płac pracowników8Metody specjalne
Równość i hashMetody operatorówIndeksowanie i dodawanieWłasne kolekcjePowtórka – ułamki11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Kompilator Ruby online