Class: Bridge::Points::Duplicate

Inherits:
Object
  • Object
show all
Defined in:
lib/bridge/points/duplicate.rb

Instance Method Summary collapse

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

#cavendishObject



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

#maximumObject



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_percentsObject



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_maximumObject



7
8
9
# File 'lib/bridge/points/duplicate.rb', line 7

def theoretical_maximum
  (@scores.size - 1) * 2
end