Programador de eventos
Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 56 de 57.
Desafío
DifícilConstruye 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
1Clases y objetos
Trabajar con archivosDefinir clasesVariables de instanciaMétodos y selfto_s e inspectRepaso: tarjeta de biblioteca4Encapsulación
Métodos privadosMétodos protegidosAsignadores privadosProtección del estadoRepaso: máquina expendedora7Polimorfismo y tipado pato
PolimorfismoTipado patoMétodos abstractoscase y clasesRepaso: métodos de pago2Accesores y self
Lectores y escritoresSetters personalizadosself en los métodosIdentidad e igualdadRepaso: lista de contactos5Herencia
SubclasesSobrescritura de métodosLlamar a superis_a? y ancestrosRepaso - Nómina del personal8Métodos especiales
Igualdad y hashMétodos de operadoresIndexación y adiciónColecciones personalizadasRepaso: fracciones11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Compilador de Ruby online