Skip to content

Instantly share code, notes, and snippets.

@darya-makarenko
Last active November 23, 2018 18:04
Show Gist options
  • Save darya-makarenko/b9e9f9923bab79d3e762da1516fe200c to your computer and use it in GitHub Desktop.
Save darya-makarenko/b9e9f9923bab79d3e762da1516fe200c to your computer and use it in GitHub Desktop.
class Game
attr_reader :won_balls
attr_reader :missed_balls
def initialize(won_balls, missed_balls)
@won_balls = won_balls
@missed_balls = missed_balls
end
def result
@result ||= result_text(won_balls <=> missed_balls)
end
def result_description
"you #{result} (#{won_balls}, #{missed_balls})"
end
private
def result_text(value)
case value
when -1 then "lose"
when 0 then "draw"
when 1 then "win"
end
end
end
$LOAD_PATH.unshift(".")
require "team_statistics"
puts "Enter the elements of won balls array: (f.e. 1 2 3 4)"
won = gets.chomp.split(" ").map{ |el| el.to_i }
puts "Enter the elements of missed balls array: (f.e. 4 3 2 1)"
lost = gets.chomp.split(" ").map{ |el| el.to_i }
team_stat = TeamStatistics.new(won, lost)
team_stat.print_report
class TeamStatistics
attr_reader :games
def initialize(win, lose)
@games = win.zip(lose).map { |scores| Game.new(scores[0], scores[1]) }
end
def print_report
games.each_with_index { |game, i| puts "game #{i + 1}: #{game.result_description}" }
end
end
@aya-soft
Copy link

aya-soft commented Nov 20, 2018

Вывод:

Enter the elements of won balls array: (f.e. 1 2 3 4)
1 2 3 4
Enter the elements of missed balls array: (f.e. 4 3 2 1)
4 2 2 2
1 game: lose
2 game: draw
3 game: win
4 game: win

Теперь давай ее оптимизируем:

  1. Давай улучшим вывод информации об игре, возьмем в формате: game 1 you win (4 : 1)
  2. Пока программа написана в процедурном стиле, давай превратим ее в объекты, какие ты выберешь?
  3. Давай придумаем сколько у нас будет объектов и какие у них будут обязанности

@darya-makarenko
Copy link
Author

darya-makarenko commented Nov 20, 2018

  1. Подправлю
  2. Думаю, можно сделать объект класса Game, в котором будет храниться счет игры, и класс Team, в котором будет сделана агрегация всех игр, в которых участвовала команда. Также понадобится класс GamesetAnalyser, которому будет поступать запрос от команды на получение статистики по играм, и который будет выдавать результаты.

@aya-soft
Copy link

Получается Game - событие, которое произошло в конкретную дату и закончилось с конкретным счетом. СОГЛАСЕН!
Какие атрибуты нам понадобятся?

@darya-makarenko
Copy link
Author

Хм. Необходимо сделать атрибут date (дата), далее won_balls, missed_balls. Можно добавить место проведения - Place и название матча (Имена команд-участников?)

@aya-soft
Copy link

🥇

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment