randprize 0.1.1 → 0.1.2
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 +8 -8
- data/Gemfile +1 -0
- data/README.md +19 -0
- data/lib/randprize/manage_prizes.rb +23 -13
- data/test/randprize.rb +8 -1
- data/test/test_helper.rb +3 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MGRkNzRjYjNhNDg0YWFjYTI4Y2JmMmYzMjIyOWM1NWJmN2YyM2U3Yw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NDlkYTQ5YjY1MTU4Zjk3Nzk0ODNiZWVmZmQ3ZGI2M2E0NDJjZmIyZQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NDJjMTkwNTUwNzI3ODdiZWMxNTg3OGZlNWIzYTFmZWNhZDQ0NzlmZDBiZWNk
|
10
|
+
YTM4ZTdkOGE5ZTJkOTllNWY2ZjNhMmM5ZDhkOGIyOGMxZmIzMGY1YjQ0Mzg0
|
11
|
+
NWU0NDI1NzdmYzU3NzM5YTA3NmJiZGU0Zjg5ZjI4NjQ2YzJhMDE=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YTAyNzNjYWJmMzVmYjMzZTQwZjMwN2UwNTIxMDgwZWQ4MzMzMDYwYWUxZTMy
|
14
|
+
YjYzZjhlNGQzOWQ4NjJiMWZlZDczMWQ0YTY3OGZjZTNjYWZjMWFjNDkxYzY4
|
15
|
+
YWMzZmEwY2NiMmEyMzY5N2I5NGI0Y2IzODIwYzE5MzAyZjE1NWU=
|
data/Gemfile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
gem "codeclimate-test-reporter"
|
data/README.md
CHANGED
@@ -1,6 +1,25 @@
|
|
1
1
|
[](https://travis-ci.org/semdinsp/randprize)
|
2
2
|
[](https://codeclimate.com/repos/524654d9c7f3a31b29038e3a/feed)
|
3
|
+
|
3
4
|
randprize gem
|
4
5
|
============
|
5
6
|
|
6
7
|
Given a hash of prizes and odds randomly return a prize.
|
8
|
+
|
9
|
+
Prize Hash with odds
|
10
|
+
=====================
|
11
|
+
|
12
|
+
@headstails={ "T"=> {'odds'=> 2,'name'=>'win tails','value'=>0},"H"=> {'odds'=> 2,'name'=>'win heads','value'=>1}}
|
13
|
+
@dice={}
|
14
|
+
1.upto(6) {|i| @dice[i.to_s]= {'odds'=> 6,'name'=>"rolled #{i}",'value'=>i} }
|
15
|
+
@large={ "GP"=> {'odds'=> 100,'name'=>'grandprize','value'=>50000},"H"=> {'odds'=> 'REMAINING','name'=>'win heads','value'=>1}}
|
16
|
+
|
17
|
+
The REMAINING flag fills in rest of prize deck with the value
|
18
|
+
|
19
|
+
Usage
|
20
|
+
=======
|
21
|
+
|
22
|
+
@headstails={ "T"=> {'odds'=> 2,'name'=>'win tails','value'=>0},"H"=> {'odds'=> 2,'name'=>'win heads','value'=>1}}
|
23
|
+
@pm=Randprize::ManagePrizes.new
|
24
|
+
@pm.prize_list(@headstails)
|
25
|
+
aprize=@pm.random_prize
|
@@ -12,26 +12,37 @@ module Randprize
|
|
12
12
|
raise 'prizelist must have at least two entries' if self.keylist.size<2
|
13
13
|
self.myranges={}
|
14
14
|
self.worstoddprize=0
|
15
|
+
calculate_worst_odds
|
15
16
|
normalize_odds
|
16
17
|
|
17
18
|
end
|
18
|
-
|
19
|
-
# odds must be in format 1 in x
|
20
|
-
def normalize_odds
|
19
|
+
def calculate_worst_odds
|
21
20
|
self.keylist.each { |key|
|
22
21
|
# puts "key is #{key} odds are: #{self.myprizelist[key]['odds']}"
|
23
22
|
self.worstoddprize=[self.myprizelist[key]['odds'],self.worstoddprize].max if self.myprizelist[key]['odds']!="REMAINING"
|
24
23
|
}
|
24
|
+
# puts "worst odds #{self.worstoddprize}"
|
25
|
+
end
|
26
|
+
#calculate finish odds
|
27
|
+
# return two items
|
28
|
+
def calculate_finnish_value(akey,start)
|
29
|
+
if self.myprizelist[akey]['odds']=="REMAINING"
|
30
|
+
finish=self.worstoddprize
|
31
|
+
else
|
32
|
+
self.myprizelist[akey]['odds']=self.worstoddprize/self.myprizelist[akey]['odds']
|
33
|
+
finish=self.myprizelist[akey]['odds']+start
|
34
|
+
end
|
35
|
+
finish=finish.round.to_i
|
36
|
+
finish
|
37
|
+
end
|
38
|
+
# normalize the odds to the largest odd value..
|
39
|
+
# odds must be in format 1 in x
|
40
|
+
def normalize_odds
|
41
|
+
|
25
42
|
start=0
|
26
43
|
finish=0
|
27
44
|
self.keylist.each { |key|
|
28
|
-
|
29
|
-
finish=self.worstoddprize
|
30
|
-
else
|
31
|
-
self.myprizelist[key]['odds']=self.worstoddprize/self.myprizelist[key]['odds']
|
32
|
-
finish=self.myprizelist[key]['odds']+start
|
33
|
-
end
|
34
|
-
finish=finish.round.to_i
|
45
|
+
finish=calculate_finnish_value(key,start)
|
35
46
|
self.myranges[key]=(start...finish) #excludes finish
|
36
47
|
start=finish
|
37
48
|
}
|
@@ -42,10 +53,9 @@ module Randprize
|
|
42
53
|
raise 'prize list does not have full coverage (less prizes than odds) ' if finish<self.worstoddprize
|
43
54
|
raise 'prize list has more prizes than coverage (more prizes than odds) ' if finish>self.worstoddprize
|
44
55
|
end
|
56
|
+
|
45
57
|
def view_details
|
46
|
-
puts "Prizes: [#{self.myprizelist.inspect}]"
|
47
|
-
puts "Ranges [#{self.myranges.inspect}]"
|
48
|
-
puts "All Prize Range: [#{self.myrange.inspect}]"
|
58
|
+
puts "Prizes: [#{self.myprizelist.inspect}]\nRanges [#{self.myranges.inspect}]\nAll Prize Range: [#{self.myrange.inspect}]"
|
49
59
|
end
|
50
60
|
def set_prize_range(rng)
|
51
61
|
self.myrange=rng
|
data/test/randprize.rb
CHANGED
@@ -63,9 +63,16 @@ class RandprizeTest < Test::Unit::TestCase
|
|
63
63
|
assert @pm.check_prize(5)['name']=='rolled 6', "shuld return 6"
|
64
64
|
end
|
65
65
|
end
|
66
|
+
def test_aaaworstodds
|
67
|
+
|
68
|
+
@pm.prize_list(@headstails)
|
69
|
+
puts "worstodds Here: #{@pm.worstoddprize}"
|
70
|
+
assert @pm.worstoddprize=2,"worst odds set correctly #{@pm.worstoddprize}"
|
71
|
+
end
|
66
72
|
def test_scott
|
67
73
|
puts "SCOTTT Here"
|
68
74
|
@pm.prize_list(@headstails)
|
75
|
+
assert @pm.worstoddprize=2,"worst odds set correctly"
|
69
76
|
aprize=@pm.random_prize
|
70
77
|
puts "aprize is #{aprize}, count "
|
71
78
|
puts " myrange #{@pm.myrange} rand range returns: #{@pm.random_range}"
|
@@ -77,7 +84,7 @@ class RandprizeTest < Test::Unit::TestCase
|
|
77
84
|
end
|
78
85
|
end
|
79
86
|
def test_randomprize_forrandom
|
80
|
-
steps=
|
87
|
+
steps=4000
|
81
88
|
count=0
|
82
89
|
1.upto(steps) do
|
83
90
|
@pm.prize_list(@headstails)
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: randprize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Sproule
|
@@ -21,6 +21,7 @@ files:
|
|
21
21
|
- lib/randprize.rb
|
22
22
|
- test/randprize.rb
|
23
23
|
- test/test_helper.rb
|
24
|
+
- Gemfile
|
24
25
|
- README.md
|
25
26
|
homepage: http://github.com/semdinsp/randprize
|
26
27
|
licenses: []
|
@@ -44,5 +45,5 @@ rubyforge_project: randprize
|
|
44
45
|
rubygems_version: 2.0.6
|
45
46
|
signing_key:
|
46
47
|
specification_version: 4
|
47
|
-
summary:
|
48
|
+
summary: Random prize from hash with odds values
|
48
49
|
test_files: []
|