Menu
CoddyTech

Ôn tập: giải đấu thể thao

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 31 trên 57.

challenge icon

Thử thách

Khó

Hãy xây dựng một bảng xếp hạng giải đấu nhỏ. Team bao gồm Comparable: một đội xếp cao hơn khi có nhiều điểm hơn (3 điểm cho một trận thắng, 1 điểm cho một trận hòa), tiếp đến là hiệu số bàn thắng tốt hơn, rồi đến tên đứng trước theo thứ tự bảng chữ cái. record(scored, conceded) cập nhật đội, còn to_s trả về Reds 7 pts, +3. League bao gồm Enumerable: each lần lượt trả về các đội, play(line) ghi nhận kết quả như Reds 2-1 Blues cho cả hai đội (tạo đội vào lần đầu tên đội xuất hiện), còn table trả về các đội từ mạnh nhất đến yếu nhất bằng sort. Mô-đun Rankable có leader (đội mạnh nhất, lấy từ max) được đưa vào League.

Code được cung cấp chuyển từng dòng đầu vào cho play, sau đó in bảng xếp hạng kèm thứ hạng (1. Reds 7 pts, +3), đội dẫn đầu và các đội chưa thắng trận nào, được tìm bằng select.

Code của bạn nằm trong các tệp rankable.rb, team.rb và league.rb. main.rb chứa code đầu vào/đầu ra được cung cấp và không thể chỉnh sửa.

Tự làm thử

require_relative 'rankable'
require_relative 'team'
require_relative 'league'

# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input = []
while (line = gets)
  input << line.chomp
end
league = League.new
input.each { |line| league.play(line) }
league.table.each_with_index { |t, i| puts "#{i + 1}. #{t}" }
puts "leader: #{league.leader&.name}"
winless = league.select { |t| t.wins.zero? }.map(&:name).sort
puts "no wins: #{winless.empty? ? "none" : winless.join(", ")}"

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