Pianificatore di eventi
Fa parte della sezione Programmazione orientata agli oggetti del percorso Ruby di Coddy. Lezione 56 di 57.
Sfida
DifficileRealizza uno scheduler di eventi usando i metodi speciali di questa sezione. Event.new(title, day, start, finish) ha metodi di lettura per tutti e quattro gli attributi. Include Comparable e ordina per giorno, poi per ora di inizio e infine per titolo. Due eventi sono uguali con ==, eql? e hash quando hanno lo stesso titolo nello stesso giorno (lo stesso evento inserito due volte). to_s restituisce day 3 09-11 standup, con le ore a due cifre. overlaps?(other) è vero nello stesso giorno quando ciascun evento inizia prima che l'altro finisca. Scheduler#add(event) restituisce duplicate per un evento uguale, conflicts with review per il primo evento memorizzato (nell'ordine) che si sovrappone e, altrimenti, lo memorizza e restituisce added. Scheduler include Enumerable; il suo each restituisce gli eventi memorizzati nell'ordine. busiest_day restituisce busiest day 3: 5h, il giorno con il maggior numero di ore programmate (in caso di parità, il giorno precedente), oppure no events.
Il codice fornito legge gli eventi da righe nel formato title,day,start,finish e stampa la risposta per ciascuno, poi tutti gli eventi nell'ordine tramite each e infine il giorno più impegnativo.
Il tuo codice va inserito in event.rb e scheduler.rb. main.rb contiene il codice di input/output fornito e non può essere modificato.
Provalo tu
require_relative 'event'
require_relative 'scheduler'
# Codice di input/output fornito: lascialo così com'è
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
Tutte le lezioni di Programmazione orientata agli oggetti
1Classi e oggetti
Lavorare con i fileDefinire le classiVariabili d'istanzaMetodi e selfto_s e inspectRipasso - Tessera della biblioteca4Incapsulamento
Metodi privatiMetodi protettiSetter privatiProteggere lo statoRiepilogo - Distributore automatico7Polimorfismo e Duck Typing
PolimorfismoDuck TypingMetodi astratticase e classiRiepilogo - Metodi di pagamento10Pattern di progettazione Parte 2
Delegazione con ForwardablePattern DecoratorPattern BuilderPattern State2Metodi di accesso e self
Metodi di lettura e scritturaSetter personalizzatiself nei metodiIdentità e uguaglianzaRiepilogo - Elenco contatti5Ereditarietà
SottoclassiRidefinizione dei metodiChiamare superis_a? e antenatiRiepilogo - Paghe del personale8Metodi speciali
Uguaglianza e hashMetodi degli operatoriIndicizzazione e appendCollezioni personalizzateRiepilogo - Frazioni11Progetto: Gestione della biblioteca
Libri e iscrittiPrendere in prestito i libriEsercitati da solo: Compilatore Ruby online