Sha256: 0b5e121a2d2417c09c8accf5e6a53b7b075d1aa5dfccd48577829a7f618b9b09

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

module Bridge::Points
  class Duplicate
    def initialize(*scores)
      @scores = Array(scores).flatten.sort.reverse
    end

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

    def skipped_scores(number = 1)
      @scores[number..(-1 - number)]
    end

    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

    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

    def maximum_in_percents
      maximum.tap do |result|
        result.each do |score, points|
          result[score] = (points * 100.0 / theoretical_maximum)
        end
      end
    end

    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

    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
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bridge-0.2.0 lib/bridge/points/duplicate.rb
bridge-0.1.4 lib/bridge/points/duplicate.rb