agb_handicap 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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