agb_handicap 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/agb_handicap.rb +30 -23
  3. metadata +7 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a4c2c93231be30f61e8d6ae17c297502fa5810bf
4
- data.tar.gz: 2f3d28728e20cbef016fc3ec75cdaa16b04911b5
3
+ metadata.gz: cce869c319750fd0771d7d7ddb91770983743a3d
4
+ data.tar.gz: 8d2692c823c9d0ac52514b5809bbdebe9761bcc0
5
5
  SHA512:
6
- metadata.gz: '09098458b0291c00031a5bc139fa2dfe7c913d3b8019c2c0c6e3ef81c882eafb564903fed7016184cbb0fc51b1a31f6bb14de5077ce5866c78ae6898f764fdc1'
7
- data.tar.gz: abc4983c6cb9790608c161719a6c1d8a0f06b58877c6542cc970ab475e18a62aad699de4f360e280143cdfce3ea4646e9a7640653dbd4a472ed237c88a5f4edb
6
+ metadata.gz: 14b0208ec8714058d2ac64b0199d3ac6f8e3831acd536f48319c4e13b5048e874b37f8f99d905835522ca0ec96d1ae33b20774856a025a714f1f2abd4d1a5858
7
+ data.tar.gz: 9b1a7be6cbf4e235c978a5b70b8b0f304f7ad495f6d4afc39162480087508c7397d4045ffc3c45a5fbdc8ba920292f7d4a35b29fc8a4acfc10da1a750efa8b16
@@ -12,14 +12,21 @@ module AgbHandicap
12
12
 
13
13
  class << self
14
14
 
15
- # score = integer
16
- # distances = array
15
+ # Calculate AGB score handicap as per David Lane's original algorithm
16
+ #
17
+ # Example:
18
+ # >> distances = [
19
+ # {'range_in_meters' => 91.44, 'total_shots' => 72, 'target_diameter_cm' => 122, 'scoring_scheme' => 'IMPERIAL'},
20
+ # {'range_in_meters' => 73.152, 'total_shots' => 48, 'target_diameter_cm' => 122, 'scoring_scheme' => 'IMPERIAL'},
21
+ # {'range_in_meters' => 54.864, 'total_shots' => 24, 'target_diameter_cm' => 122, 'scoring_scheme' => 'IMPERIAL'}
22
+ # ]
23
+ # >> score = 1105
24
+ #
25
+ # >> result = AgbHandicap.calculate(score, distances)
26
+ #
17
27
  def calculate(score, distances, rounded = true)
18
28
  result = agbhandicap(score, distances)
19
- if rounded
20
- result = result.ceil.to_i
21
- end
22
- result
29
+ rounded ? result.ceil.to_i : result
23
30
  end
24
31
 
25
32
  private
@@ -63,57 +70,57 @@ module AgbHandicap
63
70
  scoring = distance['scoring_scheme']
64
71
 
65
72
  score = 0
66
- sr = score_range(h, range)
73
+ sr = score_range(h.to_f, range).to_f
67
74
 
68
75
  case scoring
69
76
  when 'METRIC'
70
77
  score = 10
71
78
  (1..10).each do | n |
72
- score = score - solution( (n.to_f * diameter / 20.0 + 0.357), sr.to_f)
79
+ score = score - solution((n.to_f * diameter / 20.0 + 0.357), sr)
73
80
  end
74
81
  when 'IMPERIAL'
75
82
  score = 9
76
83
  (1..4).each do | n |
77
- score = score - (2.0 * solution( (n.to_f * diameter / 10.0 + 0.357), sr.to_f ))
84
+ score = score - (2.0 * solution((n.to_f * diameter / 10.0 + 0.357), sr))
78
85
  end
79
- score = score - solution( (diameter / 2 + 0.357), sr.to_f )
86
+ score = score - solution((diameter / 2 + 0.357), sr)
80
87
  when 'ONE_TO_FIVE' # could be worcester or NFAA round etc
81
88
  score = 5
82
89
  (1..5).each do | n |
83
- score = score - solution( (n.to_f * diameter / 10.0 + 0.357), sr.to_f )
90
+ score = score - solution((n.to_f * diameter / 10.0 + 0.357), sr)
84
91
  end
85
92
  when 'INNER_TEN'
86
93
  score = 10
87
- score = score - solution( (diameter / 40 + 0.357), sr.to_f )
94
+ score = score - solution((diameter / 40 + 0.357), sr)
88
95
  (2..10).each do | n |
89
- score = score - solution( (n.to_f * diameter / 20 + 0.357), sr.to_f )
96
+ score = score - solution((n.to_f * diameter / 20 + 0.357), sr)
90
97
  end
91
98
  when 'TRIPLE'
92
99
  score = 10
93
100
  (1..4).each do | n |
94
- score = score - solution( (n.to_f * diameter / 20 + 0.357), sr.to_f )
101
+ score = score - solution((n.to_f * diameter / 20 + 0.357), sr)
95
102
  end
96
- score = score - (6 * solution( (5 * diameter / 20 + 0.357), sr.to_f ))
103
+ score = score - (6 * solution((5 * diameter / 20 + 0.357), sr))
97
104
  when 'TRIPLE_INNER_TEN'
98
105
  score = 10
99
- score = score - solution( (diameter / 40 + 0.357), sr.to_f )
106
+ score = score - solution((diameter / 40 + 0.357), sr)
100
107
  (2..4).each do | n |
101
- score = score - solution( (n.to_f * diameter / 20 + 0.357), sr.to_f )
108
+ score = score - solution((n.to_f * diameter / 20 + 0.357), sr)
102
109
  end
103
- score = score - (6 * solution( (5 * diameter / 20 + 0.357), sr.to_f ))
104
- when 'SIX_ZONE' # WA 50M Compound
110
+ score = score - (6 * solution((5 * diameter / 20 + 0.357), sr))
111
+ when 'SIX_ZONE'
105
112
  score = 10
106
113
  (1..5).each do | n |
107
- score = score - solution( (n.to_f * diameter / 20 + 0.357), sr.to_f )
114
+ score = score - solution((n.to_f * diameter / 20 + 0.357), sr)
108
115
  end
109
- score = score - (5 * solution( (6 * diameter / 20 + 0.357), sr.to_f ))
116
+ score = score - (5 * solution((6 * diameter / 20 + 0.357), sr))
110
117
  end
111
118
 
112
- (score.to_f * shots.to_f).to_f
119
+ (score.to_f * shots).to_f
113
120
  end
114
121
 
115
122
  def score_range(h, range)
116
- 100 * range * (1.036 ** (h.to_f + 12.9)) * 5e-4 * (1 + 1.429e-6 * (1.07 ** (h.to_f + 4.3)) * (range * range))
123
+ 100 * range * (1.036 ** (h + 12.9)) * 5e-4 * (1 + 1.429e-6 * (1.07 ** (h + 4.3)) * (range * range))
117
124
  end
118
125
 
119
126
  def solution(operator, score_range)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: agb_handicap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Davies
@@ -14,42 +14,42 @@ dependencies:
14
14
  name: minitest-reporters
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: guard
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: guard-minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: Calculate Archery GB/GNAS handicaps for standard target rounds. Based