Class: Bridge::Points::Duplicate
- Inherits:
-
Object
- Object
- Bridge::Points::Duplicate
- Defined in:
- lib/bridge/points/duplicate.rb
Instance Method Summary collapse
- #average_score(number_to_skip = 1) ⇒ Object
- #butler(number_to_skip = 1) ⇒ Object
- #cavendish ⇒ Object
-
#initialize(*scores) ⇒ Duplicate
constructor
A new instance of Duplicate.
- #maximum ⇒ Object
- #maximum_in_percents ⇒ Object
- #skipped_scores(number = 1) ⇒ Object
- #theoretical_maximum ⇒ Object
Constructor Details
#initialize(*scores) ⇒ Duplicate
Returns a new instance of Duplicate.
3 4 5 |
# File 'lib/bridge/points/duplicate.rb', line 3 def initialize(*scores) @scores = Array(scores).flatten.sort.reverse end |
Instance Method Details
#average_score(number_to_skip = 1) ⇒ Object
15 16 17 18 |
# File 'lib/bridge/points/duplicate.rb', line 15 def average_score(number_to_skip = 1) scores = skipped_scores(number_to_skip) ((scores.inject(0.0) { |result, score| result += score} / scores.size) + 5).div(10) * 10 end |
#butler(number_to_skip = 1) ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/bridge/points/duplicate.rb', line 36 def butler(number_to_skip = 1) {}.tap do |result| @scores.each do |score| result[score] = Bridge::Points.imps(score - average_score(number_to_skip)) end end end |
#cavendish ⇒ Object
44 45 46 47 48 49 50 |
# File 'lib/bridge/points/duplicate.rb', line 44 def cavendish {}.tap do |result| @scores.each do |score| result[score] ||= @scores.inject(0.0) { |points, s| points += Bridge::Points.imps(score - s) } / (@scores.size - 1) end end end |
#maximum ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/bridge/points/duplicate.rb', line 20 def maximum {}.tap do |result| @scores.each_with_index do |score, i| result[score] ||= @scores[(i + 1)..-1].inject(0) { |points, s| points += (score <=> s) + 1 } end end end |
#maximum_in_percents ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/bridge/points/duplicate.rb', line 28 def maximum_in_percents maximum.tap do |result| result.each do |score, points| result[score] = (points * 100.0 / theoretical_maximum) end end end |
#skipped_scores(number = 1) ⇒ Object
11 12 13 |
# File 'lib/bridge/points/duplicate.rb', line 11 def skipped_scores(number = 1) @scores[number..(-1 - number)] end |
#theoretical_maximum ⇒ Object
7 8 9 |
# File 'lib/bridge/points/duplicate.rb', line 7 def theoretical_maximum (@scores.size - 1) * 2 end |