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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGJiMTI3YjZlNjMyZTU4ZDg0NjFkNWZjYTdjMGE0MDdjYzkxZDg2OQ==
4
+ MGRkNzRjYjNhNDg0YWFjYTI4Y2JmMmYzMjIyOWM1NWJmN2YyM2U3Yw==
5
5
  data.tar.gz: !binary |-
6
- ZTYwZDkzNWQwZjIxZTE1MDQ4MDQ2NWM2OTVkZjkxYmQzYzBhYTUzZA==
6
+ NDlkYTQ5YjY1MTU4Zjk3Nzk0ODNiZWVmZmQ3ZGI2M2E0NDJjZmIyZQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YzYwYzk0ZDZlN2UzNDk3ZDZlMGU0NmQzMWZiYzFiNWY4M2YzOTFjZWQ4NjY1
10
- MThiODQwNGY5Mjg2MTE2N2Y2OWUyMmIwM2Y1NTVkMjA0ZGFhMGQ4MjA2MWFh
11
- ZDQ1NjExZjIzYmNmMTMxNjc5Y2NhNWUwNDEyYWQ2YWZjZmRjYmQ=
9
+ NDJjMTkwNTUwNzI3ODdiZWMxNTg3OGZlNWIzYTFmZWNhZDQ0NzlmZDBiZWNk
10
+ YTM4ZTdkOGE5ZTJkOTllNWY2ZjNhMmM5ZDhkOGIyOGMxZmIzMGY1YjQ0Mzg0
11
+ NWU0NDI1NzdmYzU3NzM5YTA3NmJiZGU0Zjg5ZjI4NjQ2YzJhMDE=
12
12
  data.tar.gz: !binary |-
13
- ZGUxZGU0NjBmZjc2NzNjYjA1ZTY1ODExZGJjZjY3M2EwODU5ZmEyYWUyZDRm
14
- MmRjM2UzNWU3YjJiOWEwMTAzYTk3YTBhZGQxMmVmNTMyZWRhM2RmZjBhN2Rk
15
- OTkyMzNlZWYxYjM2NjVjNjU4YmQ2ZmVmMjE3MTEzMDM4MThiMTA=
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
- # normalize the odds to the largest odd value..
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
- if self.myprizelist[key]['odds']=="REMAINING"
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=2000
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
@@ -1,3 +1,6 @@
1
1
  require 'stringio'
2
2
  require 'test/unit'
3
3
  require File.dirname(__FILE__) + '/../lib/randprize'
4
+ require "codeclimate-test-reporter"
5
+ CodeClimate::TestReporter.start
6
+
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.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: Base sms application
48
+ summary: Random prize from hash with odds values
48
49
  test_files: []