Menu
Coddy logo textTech

Programador de eventos

Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 56 de 57.

challenge icon

Desafío

Difícil

Construye un planificador de eventos con los métodos especiales de esta sección. Event.new(title, day, start, finish) tiene lectores para los cuatro elementos. Incluye Comparable y ordena por día, después por hora de inicio y después por título. Dos eventos son iguales con ==, eql? y hash cuando tienen el mismo título en el mismo día (el mismo evento introducido dos veces). to_s devuelve day 3 09-11 standup, con horas de dos dígitos. overlaps?(other) es verdadero el mismo día cuando cada evento comienza antes de que termine el otro. Scheduler#add(event) devuelve duplicate para un evento igual, conflicts with review para el primer evento almacenado (en orden) que se solapa, y, de lo contrario, lo almacena y devuelve added. Scheduler incluye Enumerable; su método each produce los eventos almacenados en orden. busiest_day devuelve busiest day 3: 5h, el día con más horas programadas (el día más temprano en caso de empate), o no events.

El código proporcionado lee los eventos como líneas con el formato title,day,start,finish e imprime la respuesta para cada uno; después, imprime todos los eventos en orden mediante each y el día más ocupado.

Tu código debe estar en event.rb y scheduler.rb. main.rb contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

require_relative 'event'
require_relative 'scheduler'

# Código de entrada/salida suministrado: déjalo tal 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 las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de Ruby online