Menu
Coddy logo textTech

Recapitulação - Liga Esportiva

Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 31 de 57.

challenge icon

Desafio

Difícil

Crie uma pequena tabela de classificação. Team inclui Comparable: uma equipe é maior quando tem mais pontos (3 por vitória, 1 por empate), depois um saldo de gols melhor e, por fim, um nome que vem antes em ordem alfabética. record(scored, conceded) atualiza a equipe, e to_s retorna Reds 7 pts, +3. League inclui Enumerable: each produz as equipes, play(line) registra um resultado como Reds 2-1 Blues para ambas as equipes (criando uma equipe na primeira vez que seu nome aparece), e table retorna as equipes da melhor para a pior usando sort. O módulo Rankable, com leader (a melhor equipe, obtida de max), é incluído em League.

O código fornecido passa cada linha de entrada para play e, em seguida, imprime a tabela com as posições (1. Reds 7 pts, +3), a líder e as equipes sem nenhuma vitória em qualquer jogo, encontradas com select.

Seu código deve estar em rankable.rb, team.rb e league.rb. main.rb contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

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

# Código de entrada/saída fornecido: mantenha-o 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 as lições de Programação orientada a objetos

Pratique por conta própria: Compilador de Ruby online