Agendador de Eventos
Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 56 de 57.
Desafio
DifícilCrie um agendador de eventos com os métodos especiais desta seção. Event.new(title, day, start, finish) possui leitores para os quatro argumentos. Ele inclui Comparable e ordena por dia, depois por hora de início e, por fim, por título. Dois eventos são iguais com ==, eql? e hash quando têm o mesmo título no mesmo dia (o mesmo evento inserido duas vezes). to_s retorna day 3 09-11 standup, com horas de dois dígitos. overlaps?(other) é verdadeiro no mesmo dia quando cada evento começa antes de o outro terminar. Scheduler#add(event) retorna duplicate para um evento igual, conflicts with review para o primeiro evento armazenado (na ordem) que se sobrepõe, e, caso contrário, armazena o evento e retorna added. Scheduler inclui Enumerable; seu each fornece os eventos armazenados na ordem. busiest_day retorna busiest day 3: 5h, o dia com mais horas agendadas (em caso de empate, o dia mais cedo), ou no events.
O código fornecido lê os eventos como linhas no formato title,day,start,finish e imprime a resposta para cada um, depois cada evento na ordem por meio de each, e o dia mais movimentado.
Seu código deve ficar em event.rb e scheduler.rb. main.rb contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
require_relative 'event'
require_relative 'scheduler'
# Código de entrada/saída fornecido: mantenha-o como está
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
Todas as lições de Programação orientada a objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesVariáveis de InstânciaMétodos e selfto_s e inspectRevisão - Cartão da Biblioteca4Encapsulamento
Métodos privadosMétodos protegidosSetters privadosProtegendo o estadoRevisão - Máquina de venda automática7Polimorfismo e Duck Typing
PolimorfismoDuck TypingMétodos Abstratoscase e ClassesRevisão - Métodos de Pagamento2Acessores e self
Leitores e GravadoresSetters Personalizadosself nos MétodosIdentidade e IgualdadeRecapitulação - Lista de Contatos5Herança
SubclassesSobrescrita de métodosChamando superis_a? e ancestraisRevisão - Folha de pagamento da equipe8Métodos Especiais
Igualdade e hashMétodos de OperadoresIndexação e AdiçãoColeções PersonalizadasRevisão - Frações11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Compilador de Ruby online