Menu
Coddy logo textTech

Powtórzenie — liga sportowa

Część sekcji Programowanie obiektowe ścieżki Ruby w Coddy. Lekcja 31 z 57.

challenge icon

Wyzwanie

Trudny

Zbuduj małą tabelę ligową. Team zawiera Comparable: drużyna jest wyżej, gdy ma więcej punktów (3 za zwycięstwo, 1 za remis), następnie lepszy bilans bramek, a na końcu wcześniejszą nazwę w kolejności alfabetycznej. record(scored, conceded) aktualizuje dane drużyny, a to_s zwraca Reds 7 pts, +3. League zawiera Enumerable: each zwraca kolejne drużyny, play(line) zapisuje wynik, na przykład Reds 2-1 Blues, dla obu drużyn (tworząc drużynę przy pierwszym wystąpieniu jej nazwy), a table zwraca drużyny od najlepszej do najsłabszej za pomocą sort. Moduł Rankable z metodą leader (najlepsza drużyna, zwracana przez max) jest dołączony do League.

Dostarczony kod przekazuje każdy wiersz wejściowy do play, a następnie wypisuje tabelę z pozycjami (1. Reds 7 pts, +3), lidera oraz drużyny, które nie wygrały żadnego meczu — znalezione za pomocą select.

Twój kod umieść w plikach rankable.rb, team.rb i league.rb. main.rb zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.

Spróbuj swoich sił

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

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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(", ")}"

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Ruby online