randprize 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Build Status](https://travis-ci.org/semdinsp/randprize.png)](https://travis-ci.org/semdinsp/randprize)
|
2
2
|
[![Code Climate](https://codeclimate.com/repos/524654d9c7f3a31b29038e3a/badges/58ed8386e3e6d266c7ac/gpa.png)](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: []
|