Menu
Coddy logo textTech

Agendador de Eventos

Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 56 de 57.

challenge icon

Desafio

Difícil

Crie 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

Pratique por conta própria: Compilador de Ruby online