Планировщик мероприятий
Часть раздела Объектно-ориентированное программирование путешествия по Ruby на Coddy. Урок 56 из 57.
Задание
СложноСоздайте планировщик событий, используя специальные методы из этого раздела. 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
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПеременные экземпляраМетоды и selfto_s и inspectПовторение — читательский билет4Инкапсуляция
Приватные методыЗащищённые методыПриватные сеттерыЗащита состоянияПовторение — торговый автомат7Полиморфизм и утиная типизация
ПолиморфизмУтиная типизацияАбстрактные методыcase и классыПовторение — способы оплаты10Шаблоны проектирования, часть 2
Делегирование с помощью ForwardableШаблон декоратораШаблон строителяШаблон состояния2Аксессоры и self
Чтение и записьПользовательские сеттерыself в методахИдентичность и равенствоПовторение — список контактов5Наследование
ПодклассыПереопределение методовВызов superis_a? и предкиПовторение — расчёт зарплаты сотрудников8Специальные методы
Равенство и хешированиеМетоды операторовИндексация и добавлениеПользовательские коллекцииПовторение — дроби11Проект: Управление библиотекой
Книги и читателиВыдача книг3Методы и переменные классов
Методы классовПеременные экземпляра классаКонстантыФабричные методыПовторение — коды купонов6Модули и примеси
Модули и includeРасширение объектовМодуль ComparableМодуль EnumerableПовторение — спортивная лига9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор Ruby