Menu
Coddy logo textTech

복습 - 스포츠 리그

Coddy Ruby 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 31번째.

challenge icon

챌린지

어려움

작은 리그 순위표를 만드세요. Team은 Comparable을 포함합니다. 팀은 승점이 더 많을 때(승리 시 3점, 무승부 시 1점) 더 높은 순위이며, 그다음으로 골득실이 더 좋을 때, 그다음으로 이름이 알파벳순으로 더 앞설 때 더 높은 순위입니다. record(scored, conceded)는 팀 정보를 업데이트하고, to_s는 Reds 7 pts, +3을 반환합니다. League는 Enumerable을 포함합니다. each는 팀들을 하나씩 전달하고, play(line)은 Reds 2-1 Blues와 같은 결과를 양 팀에 기록합니다(이름이 처음 나타날 때 팀을 생성합니다). 또한 table은 sort를 사용하여 팀들을 순위가 높은 순서부터 낮은 순서까지 반환합니다. leader(max에서 가져온 가장 순위가 높은 팀)를 포함하는 Rankable 모듈은 League에 포함됩니다.

제공된 코드는 모든 입력 줄을 play에 전달한 다음, 순위(1. Reds 7 pts, +3)와 리더, 그리고 select를 사용하여 찾은 경기에서 한 번도 이기지 못한 팀들을 출력합니다.

코드는 rankable.rb, team.rb, league.rb에 작성합니다. main.rb에는 제공된 입력/출력 코드가 들어 있으며 수정할 수 없습니다.

직접 해보기

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

# 제공된 입력/출력 코드: 그대로 유지하세요
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(", ")}"

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 Ruby 컴파일러