Menu
Coddy logo textTech

Wiederholung – Sportliga

Teil des Abschnitts Objektorientierte Programmierung der Ruby-Journey von Coddy. Lektion 31 von 57.

challenge icon

Aufgabe

Schwer

Erstelle eine kleine Ligatabelle. Team bindet Comparable ein: Ein Team ist größer, wenn es mehr Punkte hat (3 für einen Sieg, 1 für ein Unentschieden), danach eine bessere Tordifferenz und danach einen alphabetisch früheren Namen. record(scored, conceded) aktualisiert das Team, und to_s gibt Reds 7 pts, +3 zurück. League bindet Enumerable ein: each liefert die Teams, play(line) erfasst ein Ergebnis wie Reds 2-1 Blues für beide Teams (wobei ein Team beim ersten Auftreten seines Namens erstellt wird), und table gibt die Teams mithilfe von sort vom besten bis zum schlechtesten zurück. Das Modul Rankable mit leader (dem besten Team, ausgehend von max) wird in League eingebunden.

Der bereitgestellte Code übergibt jede Eingabezeile an play und gibt anschließend die Tabelle mit Platzierungen (1. Reds 7 pts, +3), den Spitzenreiter sowie die Teams ohne Sieg in irgendeinem Spiel aus, die mit select gefunden werden.

Dein Code gehört in rankable.rb, team.rb und league.rb. main.rb enthält den bereitgestellten Eingabe-/Ausgabecode und kann nicht bearbeitet werden.

Probier es selbst

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

# Gelieferter Ein-/Ausgabe-Code: belasse ihn wie er ist
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(", ")}"

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Ruby-Compiler