Menu
CoddyTech

Ulasan: Liga Olahraga

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Ruby di Coddy. Pelajaran 31 dari 57.

challenge icon

Tantangan

Sulit

Buat tabel liga kecil. Team menyertakan Comparable: sebuah tim dianggap lebih unggul jika memiliki lebih banyak poin (3 untuk kemenangan, 1 untuk hasil seri), lalu selisih gol yang lebih baik, lalu nama yang lebih awal secara alfabetis. record(scored, conceded) memperbarui tim, dan to_s mengembalikan Reds 7 pts, +3. League menyertakan Enumerable: each menghasilkan tim-tim, play(line) mencatat hasil seperti Reds 2-1 Blues untuk kedua tim (membuat tim saat namanya muncul untuk pertama kali), dan table mengembalikan urutan tim dari yang terbaik hingga terburuk menggunakan sort. Module Rankable dengan leader (tim terbaik, dari max) disertakan dalam League.

Kode yang disediakan meneruskan setiap baris input ke play, lalu mencetak tabel dengan posisi (1. Reds 7 pts, +3), pemimpin, dan tim-tim yang belum pernah menang dalam pertandingan apa pun, yang ditemukan dengan select.

Tulis kodemu di rankable.rb, team.rb, dan league.rb. main.rb berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

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

# Kode input/output yang disediakan: biarkan apa adanya
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(", ")}"

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Ruby online