fortune 0.0.1 → 0.0.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.
- data/README.md +152 -2
- data/lib/fortune/version.rb +1 -1
- metadata +25 -11
- checksums.yaml +0 -7
data/README.md
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
# Fortune
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This gem allows you calculate the various statistical parameters and values.
|
|
4
|
+
|
|
5
|
+
Main features of the library are:
|
|
6
|
+
* `P` - Probabilities
|
|
7
|
+
* `Odds` - Calculation of odds
|
|
8
|
+
* `A`, `Pn`, `C` - Combinatorics (accommodation, permutation, combinations)
|
|
9
|
+
* `Event` - Random selection of events from the list
|
|
10
|
+
|
|
11
|
+
## Requirements
|
|
12
|
+
|
|
13
|
+
ruby 1.9 or higher
|
|
4
14
|
|
|
5
15
|
## Installation
|
|
6
16
|
|
|
@@ -18,7 +28,143 @@ Or install it yourself as:
|
|
|
18
28
|
|
|
19
29
|
## Usage
|
|
20
30
|
|
|
21
|
-
|
|
31
|
+
#### For Hash
|
|
32
|
+
|
|
33
|
+
Recalculation of the key values to probability, assuming that P = 1
|
|
34
|
+
```ruby
|
|
35
|
+
{:a => 1, :b => 2, :c => 3}.to_p
|
|
36
|
+
# => {:a=>0.16666666666666666, :b=>0.3333333333333333, :c=>0.5}
|
|
37
|
+
```
|
|
38
|
+
Select random key by value weights
|
|
39
|
+
```ruby
|
|
40
|
+
{:a => 1, :b => 2, :c => 3}.choose
|
|
41
|
+
# => return :c with 50% probability, :a ~ 16%, :b ~ 33%
|
|
42
|
+
```
|
|
43
|
+
Choose from set by value weights
|
|
44
|
+
```ruby
|
|
45
|
+
{[:a, :b, :c] => 1, [:d] => 3}.choose_set
|
|
46
|
+
# => return :d with 75% probability
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
#### Probability
|
|
50
|
+
|
|
51
|
+
Some methods for P
|
|
52
|
+
```ruby
|
|
53
|
+
p = Fortune::P.new(:m => 1, :n => 10)
|
|
54
|
+
p = Fortune::P.new(1, 10)
|
|
55
|
+
p = Fortune::P.new(0.1)
|
|
56
|
+
# => #<Fortune::P:0x00000002316df0 @p=0.1>
|
|
57
|
+
|
|
58
|
+
p + p # => #<Fortune::P:0x0000000225e890 @p=0.2>
|
|
59
|
+
p * p # => #<Fortune::P:0x000000022602a8 @p=0.010000000000000002>
|
|
60
|
+
|
|
61
|
+
p.to_percent # => 10.0
|
|
62
|
+
|
|
63
|
+
p.odds # => #<Fortune::Odds:0x0000000230ff50 @p=0.1, @s=1, @k=9.0, @type=:on_win>
|
|
64
|
+
p.odds.to_s # => "1:9.0 on_win (p: 10.00%)"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Check event is occured
|
|
68
|
+
```ruby
|
|
69
|
+
Fortune::P.is(1,10) # => false (90%)
|
|
70
|
+
```
|
|
71
|
+
Select random element
|
|
72
|
+
```ruby
|
|
73
|
+
Fortune::P.n(3) # => 1 or 2 or 3
|
|
74
|
+
```
|
|
75
|
+
Select random key from array or range by weights ({P.n(key) => weight, ...}, P(sum(weights)) = 1)
|
|
76
|
+
```ruby
|
|
77
|
+
Fortune::P.n_select(10 => 1, 5 => 1000) # => 4
|
|
78
|
+
Fortune::P.n_select((1..10) => 1, (100..200) => 1000) # => 157
|
|
79
|
+
Fortune::P.n_select([:a,:b,:c] => 1, [:d,:e] => 1000) # => :d
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
#### Odds
|
|
83
|
+
Class for odds calculations
|
|
84
|
+
```ruby
|
|
85
|
+
odds = Fortune::Odds.new(:win => 5, :lose => 6)
|
|
86
|
+
# => #<Fortune::Odds:0x000000026ccf08 @p=0.45454545454545453, @s=5, @k=6, @type=:on_win>
|
|
87
|
+
odds_other = Fortune::Odds.new(:s => 5, :k => 7)
|
|
88
|
+
# => #<Fortune::Odds:0x00000002706168 @p=0.4166666666666667, @s=5, @k=7, @type=:on_win>
|
|
89
|
+
odds > odds_other # => true
|
|
90
|
+
odds.variants # => 11
|
|
91
|
+
odds.p # => 0.45454545454545453
|
|
92
|
+
```
|
|
93
|
+
Large values can be simple converted to human view
|
|
94
|
+
```ruby
|
|
95
|
+
Fortune::Odds.new(:win => 1345, :lose => 3623).to_s # => "1345:3623 on_win (p: 27.07%)"
|
|
96
|
+
Fortune::Odds.new(:win => 1345, :lose => 3623).to_human.to_s # => "2:5 on_win (p: 28.57%)"
|
|
97
|
+
Fortune::Odds.new(:win => 1345, :lose => 3623).to_human(:k => 5, :fractions => true).to_s # => "1.5:4 on_win (p: 27.27%)"
|
|
98
|
+
```
|
|
99
|
+
Reverse odds to lose
|
|
100
|
+
```ruby
|
|
101
|
+
odds = Fortune::Odds.new(:win => 5, :lose => 6)
|
|
102
|
+
# => #<Fortune::Odds:0x00000002822e98 @p=0.45454545454545453, @s=5, @k=6, @type=:on_win>
|
|
103
|
+
odds.revert
|
|
104
|
+
# => #<Fortune::Odds:0x00000002822e98 @p=0.5454545454545454, @s=6, @k=5, @type=:on_win>
|
|
105
|
+
odds.to_lose
|
|
106
|
+
# => #<Fortune::Odds:0x00000002822e98 @p=0.5454545454545454, @s=5, @k=6, @type=:on_lose>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### Combinatorics
|
|
110
|
+
|
|
111
|
+
#### Accomodation (A)
|
|
112
|
+
|
|
113
|
+
Permutation without repetition with select k elements.
|
|
114
|
+
|
|
115
|
+
Example: 20 different elements and you need select 5 of them (how many ways of selection exists?). Elements is ordered ([a,b,c] != [b,c,a])
|
|
116
|
+
```ruby
|
|
117
|
+
Fortune::A.calc(:elements => 10, :select => 5) # => 30240
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
#### Permutation
|
|
121
|
+
|
|
122
|
+
##### Permutation without repetition (Pn)
|
|
123
|
+
|
|
124
|
+
Example: the amount of distributions of the four teams in four places
|
|
125
|
+
|
|
126
|
+
```ruby
|
|
127
|
+
Fortune::Pn.calc(4) # => 24
|
|
128
|
+
```
|
|
129
|
+
other examples
|
|
130
|
+
```ruby
|
|
131
|
+
Fortune::Pn.calc(:elements => 5) # => 120
|
|
132
|
+
Fortune::Pn.calc(:elements => 5, :select => 2) # => 20
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
##### Permutation with repetition (Pnr)
|
|
136
|
+
|
|
137
|
+
Example: how many different options you can dress up if there are three sweaters two skirts and two hats (3*2*2, if all thing is equal 3, then: Pn_repetition(:n => 3, :k => 3), k - element groups, n - elements count in group)
|
|
138
|
+
|
|
139
|
+
```ruby
|
|
140
|
+
Fortune::Pn_repetition(:n => 3, :k => 3) # => 27
|
|
141
|
+
is equal to
|
|
142
|
+
Fortune::Pnr(:groups => 3, :elements => 3) # => 27 (human like variant)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### Combinations
|
|
146
|
+
|
|
147
|
+
##### Combinations without repetition (C)
|
|
148
|
+
|
|
149
|
+
Example: 10 different elements (students) and you need select 5 of them (how many ways of selection exists?). Elements does not ordered ([a,b,c] == [b,c,a])
|
|
150
|
+
|
|
151
|
+
```ruby
|
|
152
|
+
Fortune::C.calc(:elements => 10, :select => 5) # => 252
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
##### Combination with repetition (Cr)
|
|
156
|
+
|
|
157
|
+
```ruby
|
|
158
|
+
Fortune::C_repetition.calc(:elements => 10, :select => 5) # => 2002
|
|
159
|
+
same as
|
|
160
|
+
Fortune::Cr.calc(:elements => 10, :select => 5) # => 2002
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### Addon Class Methods
|
|
164
|
+
|
|
165
|
+
`Math.factorial(n)`
|
|
166
|
+
|
|
167
|
+
`Event` class - under development
|
|
22
168
|
|
|
23
169
|
## Contributing
|
|
24
170
|
|
|
@@ -27,3 +173,7 @@ TODO: Write usage instructions here
|
|
|
27
173
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
28
174
|
4. Push to the branch (`git push origin my-new-feature`)
|
|
29
175
|
5. Create new Pull Request
|
|
176
|
+
|
|
177
|
+
## Authors
|
|
178
|
+
|
|
179
|
+
Personal blog author: [Malykh Oleg](http://es0.ru/) - blog in russian
|
data/lib/fortune/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fortune
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.2
|
|
5
|
+
prerelease:
|
|
5
6
|
platform: ruby
|
|
6
7
|
authors:
|
|
7
8
|
- Malykh Oleg
|
|
8
9
|
autorequire:
|
|
9
10
|
bindir: bin
|
|
10
11
|
cert_chain: []
|
|
11
|
-
date: 2013-12-
|
|
12
|
+
date: 2013-12-16 00:00:00.000000000 Z
|
|
12
13
|
dependencies:
|
|
13
14
|
- !ruby/object:Gem::Dependency
|
|
14
15
|
name: bundler
|
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
none: false
|
|
16
18
|
requirements:
|
|
17
19
|
- - ~>
|
|
18
20
|
- !ruby/object:Gem::Version
|
|
@@ -20,6 +22,7 @@ dependencies:
|
|
|
20
22
|
type: :development
|
|
21
23
|
prerelease: false
|
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
23
26
|
requirements:
|
|
24
27
|
- - ~>
|
|
25
28
|
- !ruby/object:Gem::Version
|
|
@@ -27,29 +30,33 @@ dependencies:
|
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
|
28
31
|
name: rake
|
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
|
33
|
+
none: false
|
|
30
34
|
requirements:
|
|
31
|
-
- - '>='
|
|
35
|
+
- - ! '>='
|
|
32
36
|
- !ruby/object:Gem::Version
|
|
33
37
|
version: '0'
|
|
34
38
|
type: :development
|
|
35
39
|
prerelease: false
|
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
+
none: false
|
|
37
42
|
requirements:
|
|
38
|
-
- - '>='
|
|
43
|
+
- - ! '>='
|
|
39
44
|
- !ruby/object:Gem::Version
|
|
40
45
|
version: '0'
|
|
41
46
|
- !ruby/object:Gem::Dependency
|
|
42
47
|
name: rspec
|
|
43
48
|
requirement: !ruby/object:Gem::Requirement
|
|
49
|
+
none: false
|
|
44
50
|
requirements:
|
|
45
|
-
- - '>='
|
|
51
|
+
- - ! '>='
|
|
46
52
|
- !ruby/object:Gem::Version
|
|
47
53
|
version: '0'
|
|
48
54
|
type: :development
|
|
49
55
|
prerelease: false
|
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
none: false
|
|
51
58
|
requirements:
|
|
52
|
-
- - '>='
|
|
59
|
+
- - ! '>='
|
|
53
60
|
- !ruby/object:Gem::Version
|
|
54
61
|
version: '0'
|
|
55
62
|
description: Ruby gem for calculate probability, odds and combinations. Mostly helpfull
|
|
@@ -95,26 +102,33 @@ files:
|
|
|
95
102
|
homepage: https://github.com/Fotom/Fortune
|
|
96
103
|
licenses:
|
|
97
104
|
- MIT
|
|
98
|
-
metadata: {}
|
|
99
105
|
post_install_message:
|
|
100
106
|
rdoc_options: []
|
|
101
107
|
require_paths:
|
|
102
108
|
- lib
|
|
103
109
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
|
+
none: false
|
|
104
111
|
requirements:
|
|
105
|
-
- - '>='
|
|
112
|
+
- - ! '>='
|
|
106
113
|
- !ruby/object:Gem::Version
|
|
107
114
|
version: '0'
|
|
115
|
+
segments:
|
|
116
|
+
- 0
|
|
117
|
+
hash: 3317073877623941602
|
|
108
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
|
+
none: false
|
|
109
120
|
requirements:
|
|
110
|
-
- - '>='
|
|
121
|
+
- - ! '>='
|
|
111
122
|
- !ruby/object:Gem::Version
|
|
112
123
|
version: '0'
|
|
124
|
+
segments:
|
|
125
|
+
- 0
|
|
126
|
+
hash: 3317073877623941602
|
|
113
127
|
requirements: []
|
|
114
128
|
rubyforge_project:
|
|
115
|
-
rubygems_version:
|
|
129
|
+
rubygems_version: 1.8.25
|
|
116
130
|
signing_key:
|
|
117
|
-
specification_version:
|
|
131
|
+
specification_version: 3
|
|
118
132
|
summary: Lib for get changes, odds, probability and combinations for given values
|
|
119
133
|
test_files:
|
|
120
134
|
- spec/fortune/a_spec.rb
|
checksums.yaml
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
SHA1:
|
|
3
|
-
metadata.gz: 9fc004785ef01cd70f23583a76c0d36cfd7d3607
|
|
4
|
-
data.tar.gz: eb71d50d976e4d0a78f582e2db63dc5a6947f9c3
|
|
5
|
-
SHA512:
|
|
6
|
-
metadata.gz: df3008f56c4471c58cad733994baec963df15e064c80c8ddc0a46700417a571031c874e42e1220e4d75e1f396a962ac50cd75283d1cb30b20c3e990a9a0f4e32
|
|
7
|
-
data.tar.gz: 19695ff2b954f96f74ef008954690d18088d1116d13811db7dae5b54ffc634bc4fa3c05ffff2c515e9eb15c67fb082291db4d2a05185bc0e6663f819be84d10c
|