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