Menu
CoddyTech

Lịch sự kiện

Thuộc phần Lập trình hướng đối tượng trong hành trình Ruby của Coddy. Bài học 56 trên 57.

challenge icon

Thử thách

Khó

Hãy xây dựng bộ lập lịch sự kiện bằng các phương thức đặc biệt trong phần này. Event.new(title, day, start, finish) có bộ đọc cho cả bốn thuộc tính. Lớp này bao gồm Comparable và sắp xếp theo ngày, rồi đến giờ bắt đầu, sau đó là tiêu đề. Hai sự kiện được xem là bằng nhau với ==, eql? và hash khi chúng có cùng tiêu đề trong cùng một ngày (cùng một sự kiện được nhập hai lần). to_s trả về day 3 09-11 standup, với giờ gồm hai chữ số. overlaps?(other) trả về đúng nếu hai sự kiện cùng ngày và mỗi sự kiện bắt đầu trước khi sự kiện kia kết thúc. Scheduler#add(event) trả về duplicate nếu có sự kiện bằng nó, conflicts with review nếu có sự kiện đầu tiên đã lưu (theo thứ tự) bị trùng giờ, nếu không thì lưu sự kiện đó và trả về added. Scheduler bao gồm Enumerable; phương thức each lần lượt trả về các sự kiện đã lưu theo thứ tự. busiest_day trả về busiest day 3: 5h, tức ngày có tổng số giờ được lên lịch nhiều nhất (nếu bằng nhau thì chọn ngày sớm hơn), hoặc no events.

Code được cung cấp đọc các sự kiện từ những dòng có định dạng title,day,start,finish và in phản hồi cho từng sự kiện, sau đó in từng sự kiện theo thứ tự thông qua each, rồi in ngày bận nhất.

Viết code của bạn trong event.rb và scheduler.rb. main.rb chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.

Tự làm thử

require_relative 'event'
require_relative 'scheduler'

# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
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

Tất cả bài học trong Lập trình hướng đối tượng

Tự luyện tập: Trình biên dịch Ruby online