Menu
Coddy logo textTech

Repaso: liga deportiva

Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 31 de 57.

challenge icon

Desafío

Difícil

Construye una pequeña tabla de liga. Team incluye Comparable: un equipo es superior cuando tiene más puntos (3 por una victoria, 1 por un empate), después una mejor diferencia de goles y, por último, un nombre que aparece antes alfabéticamente. record(scored, conceded) actualiza el equipo, y to_s devuelve Reds 7 pts, +3. League incluye Enumerable: each proporciona los equipos, play(line) registra un resultado como Reds 2-1 Blues para ambos equipos (creando un equipo la primera vez que aparece su nombre), y table devuelve los equipos del mejor al peor mediante sort. El módulo Rankable, con leader (el mejor equipo, obtenido de max), se incluye en League.

El código proporcionado pasa cada línea de entrada a play y después imprime la tabla con las posiciones (1. Reds 7 pts, +3), el líder y los equipos sin ninguna victoria en ningún partido, encontrados mediante select.

Tu código va en rankable.rb, team.rb y league.rb. main.rb contiene el código proporcionado de entrada/salida y no se puede editar.

Pruébalo tú mismo

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

# Código de entrada/salida suministrado: déjalo tal como está
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(", ")}"

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Compilador de Ruby online