Repaso: liga deportiva
Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 31 de 57.
Desafío
DifícilConstruye 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
1Clases y objetos
Trabajar con archivosDefinir clasesVariables de instanciaMétodos y selfto_s e inspectRepaso: tarjeta de biblioteca4Encapsulación
Métodos privadosMétodos protegidosAsignadores privadosProtección del estadoRepaso: máquina expendedora7Polimorfismo y tipado pato
PolimorfismoTipado patoMétodos abstractoscase y clasesRepaso: métodos de pago2Accesores y self
Lectores y escritoresSetters personalizadosself en los métodosIdentidad e igualdadRepaso: lista de contactos5Herencia
SubclasesSobrescritura de métodosLlamar a superis_a? y ancestrosRepaso - Nómina del personal8Métodos especiales
Igualdad y hashMétodos de operadoresIndexación y adiciónColecciones personalizadasRepaso: fracciones11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de libros3Métodos y variables de clase
Métodos de claseVariables de instancia de claseConstantesMétodos de fábricaRepaso: códigos de cupón6Módulos y mixins
Módulos e inclusiónExtender objetosEl módulo ComparableEl módulo EnumerableRepaso: liga deportivaPractica por tu cuenta: Compilador de Ruby online