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.
- checksums.yaml +4 -4
- data/lib/agb_handicap.rb +30 -23
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cce869c319750fd0771d7d7ddb91770983743a3d
|
4
|
+
data.tar.gz: 8d2692c823c9d0ac52514b5809bbdebe9761bcc0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14b0208ec8714058d2ac64b0199d3ac6f8e3831acd536f48319c4e13b5048e874b37f8f99d905835522ca0ec96d1ae33b20774856a025a714f1f2abd4d1a5858
|
7
|
+
data.tar.gz: 9b1a7be6cbf4e235c978a5b70b8b0f304f7ad495f6d4afc39162480087508c7397d4045ffc3c45a5fbdc8ba920292f7d4a35b29fc8a4acfc10da1a750efa8b16
|
data/lib/agb_handicap.rb
CHANGED
@@ -12,14 +12,21 @@ module AgbHandicap
|
|
12
12
|
|
13
13
|
class << self
|
14
14
|
|
15
|
-
# score
|
16
|
-
#
|
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
|
-
|
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(
|
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(
|
84
|
+
score = score - (2.0 * solution((n.to_f * diameter / 10.0 + 0.357), sr))
|
78
85
|
end
|
79
|
-
score = score - solution(
|
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(
|
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(
|
94
|
+
score = score - solution((diameter / 40 + 0.357), sr)
|
88
95
|
(2..10).each do | n |
|
89
|
-
score = score - solution(
|
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(
|
101
|
+
score = score - solution((n.to_f * diameter / 20 + 0.357), sr)
|
95
102
|
end
|
96
|
-
score = score - (6 * solution(
|
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(
|
106
|
+
score = score - solution((diameter / 40 + 0.357), sr)
|
100
107
|
(2..4).each do | n |
|
101
|
-
score = score - solution(
|
108
|
+
score = score - solution((n.to_f * diameter / 20 + 0.357), sr)
|
102
109
|
end
|
103
|
-
score = score - (6 * solution(
|
104
|
-
when 'SIX_ZONE'
|
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(
|
114
|
+
score = score - solution((n.to_f * diameter / 20 + 0.357), sr)
|
108
115
|
end
|
109
|
-
score = score - (5 * solution(
|
116
|
+
score = score - (5 * solution((6 * diameter / 20 + 0.357), sr))
|
110
117
|
end
|
111
118
|
|
112
|
-
(score.to_f * shots
|
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
|
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.
|
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
|