Повторение — спортивная лига
Часть раздела Объектно-ориентированное программирование путешествия по Ruby на Coddy. Урок 31 из 57.
Задание
СложноСоздайте небольшую турнирную таблицу. 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(", ")}"
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовПеременные экземпляраМетоды и selfto_s и inspectПовторение — читательский билет4Инкапсуляция
Приватные методыЗащищённые методыПриватные сеттерыЗащита состоянияПовторение — торговый автомат7Полиморфизм и утиная типизация
ПолиморфизмУтиная типизацияАбстрактные методыcase и классыПовторение — способы оплаты10Шаблоны проектирования, часть 2
Делегирование с помощью ForwardableШаблон декоратораШаблон строителяШаблон состояния2Аксессоры и self
Чтение и записьПользовательские сеттерыself в методахИдентичность и равенствоПовторение — список контактов5Наследование
ПодклассыПереопределение методовВызов superis_a? и предкиПовторение — расчёт зарплаты сотрудников8Специальные методы
Равенство и хешированиеМетоды операторовИндексация и добавлениеПользовательские коллекцииПовторение — дроби11Проект: Управление библиотекой
Книги и читателиВыдача книг3Методы и переменные классов
Методы классовПеременные экземпляра классаКонстантыФабричные методыПовторение — коды купонов6Модули и примеси
Модули и includeРасширение объектовМодуль ComparableМодуль EnumerableПовторение — спортивная лига9Паттерны проектирования. Часть 1
Паттерн «Одиночка»Фабричный паттернПаттерн «Наблюдатель»Паттерн «Стратегия»Потренируйтесь самостоятельно: Онлайн-компилятор Ruby