Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

مراجعة - دوري رياضي

جزء من قسم البرمجة كائنية التوجه في رحلة Ruby على Coddy. الدرس 31 من 57.

challenge icon

التحدي

صعب

أنشئ جدول دوري صغيرًا. تتضمن Team الوحدة Comparable: يكون الفريق أفضل عندما يملك نقاطًا أكثر (3 للفوز، و1 للتعادل)، ثم فارق أهداف أفضل، ثم اسمًا أسبق أبجديًا. تحدّث record(scored, conceded) الفريق، وتُرجع to_s القيمة Reds 7 pts, +3. تتضمن League الوحدة Enumerable: تُنتج each الفرق، وتسجّل play(line) نتيجة مثل Reds 2-1 Blues لكلا الفريقين (مع إنشاء فريق في أول مرة يظهر فيها اسمه)، وتُرجع table الفرق من الأفضل إلى الأسوأ باستخدام sort. تُضمَّن الوحدة Rankable التي تحتوي على leader (أفضل فريق، من max) في League.

يمرّر الكود المُعطى كل سطر إدخال إلى play، ثم يطبع الجدول مع المراكز (1. Reds 7 pts, +3)، والمتصدر، والفرق التي لم تحقق فوزًا في أي مباراة، والتي يتم العثور عليها باستخدام select.

يجب أن تضع كودك في rankable.rb وteam.rb وleague.rb. يحتوي main.rb على كود الإدخال/الإخراج المُعطى ولا يمكن تعديله.

جرّب بنفسك

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

# كود الإدخال/الإخراج المُزوَّد: اتركه كما هو
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(", ")}"

جميع دروس البرمجة كائنية التوجه

تدرّب بنفسك: مترجم Ruby عبر الإنترنت