Menu
Coddy logo textTech

Récapitulatif - Ligue sportive

Fait partie de la section Programmation orientée objet du Journey Ruby de Coddy. Leçon 31 sur 57.

challenge icon

Défi

Difficile

Construisez un petit classement de championnat. Team inclut Comparable : une équipe est supérieure lorsqu’elle a plus de points (3 pour une victoire, 1 pour un match nul), puis une meilleure différence de buts, puis un nom qui vient plus tôt dans l’ordre alphabétique. record(scored, conceded) met à jour l’équipe, et to_s renvoie Reds 7 pts, +3. League inclut Enumerable : each fournit les équipes, play(line) enregistre un résultat tel que Reds 2-1 Blues pour les deux équipes (en créant une équipe la première fois que son nom apparaît), et table renvoie les équipes de la meilleure à la moins bonne en utilisant sort. Le module Rankable, avec leader (la meilleure équipe, obtenue à partir de max), est inclus dans League.

Le code fourni transmet chaque ligne d’entrée à play, puis affiche le classement avec les positions (1. Reds 7 pts, +3), le leader et les équipes n’ayant remporté aucun match, trouvées avec select.

Votre code doit se trouver dans rankable.rb, team.rb et league.rb. main.rb contient le code d’entrée/sortie fourni et ne peut pas être modifié.

Essayez vous-même

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

# Code d'entrée/sortie fourni : le garder tel quel
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(", ")}"

Toutes les leçons de Programmation orientée objet

Entraînez-vous par vous-même : Compilateur Ruby en ligne