Menu
Coddy logo textTech

Планировщик мероприятий

Часть раздела Объектно-ориентированное программирование путешествия по Ruby на Coddy. Урок 56 из 57.

challenge icon

Задание

Сложно

Создайте планировщик событий, используя специальные методы из этого раздела. Event.new(title, day, start, finish) имеет методы чтения для всех четырёх атрибутов. Он включает Comparable и сортирует события по дню, затем по часу начала, затем по названию. Два события считаются равными с помощью ==, eql? и hash, если у них одинаковое название и один и тот же день (одно и то же событие было добавлено дважды). to_s возвращает day 3 09-11 standup, используя двухзначное обозначение часов. overlaps?(other) возвращает true в один и тот же день, когда каждое событие начинается раньше окончания другого. Scheduler#add(event) возвращает duplicate для равного события, conflicts with review для первого сохранённого события (в порядке хранения), с которым оно пересекается, а в противном случае сохраняет его и возвращает added. Scheduler включает Enumerable; его each передаёт сохранённые события в заданном порядке. busiest_day возвращает busiest day 3: 5h — день с наибольшим количеством запланированных часов (при равенстве — более ранний день), — либо no events.

Предоставленный код считывает события в виде строк title,day,start,finish и выводит ответ для каждого из них, затем каждое событие по порядку через each, а также самый загруженный день.

Ваш код должен находиться в event.rb и scheduler.rb. В main.rb содержится предоставленный код ввода/вывода, и его нельзя редактировать.

Попробуйте сами

require_relative 'event'
require_relative 'scheduler'

# Предоставленный код ввода/вывода: оставьте его как есть
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

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор Ruby