guided_randomness 0.1.1

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/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ .DS_Store
2
+ *.gem
3
+ .bundle
4
+ Gemfile.lock
5
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in guided_randomness.gemspec
4
+ gemspec
data/README ADDED
@@ -0,0 +1,15 @@
1
+ Simple gem for Ruby which extends Array class, and gave possibility to pick element from it at random, however with certain probability (probability is given for each element).
2
+
3
+ Instalation:
4
+
5
+ gem install guided_randomness
6
+
7
+
8
+ Usage:
9
+
10
+ require 'guided_randomness'
11
+ [1,2,3].get_rand([0.5, 0.3, 0.2])
12
+
13
+ or
14
+ require 'guided_randomness'
15
+ [1,2,3].get_rand([4,12,9])
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ namespace :test do
5
+ desc 'Run tests'
6
+ task :test do
7
+ ruby 'test/test.rb'
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "guided_randomness/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "guided_randomness"
7
+ s.version = GuidedRandomness::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Piotr Esse Szmielew"]
10
+ s.email = ["p.szmielew@roflcopter.pl"]
11
+ s.homepage = ""
12
+ s.summary = %q{Simple gem for Ruby which extends Array class, and gave possibility to pick element from it at random, however with certain probability (probability is given for each element).}
13
+ s.description = %q{
14
+ Usage:
15
+
16
+ require 'guided_randomness'
17
+ [1,2,3].get_rand([0.5, 0.3, 0.2])
18
+
19
+ or
20
+ require 'guided_randomness'
21
+ [1,2,3].get_rand([4,12,9])
22
+ }
23
+
24
+ s.rubyforge_project = "guided_randomness"
25
+
26
+ s.files = `git ls-files`.split("\n")
27
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
28
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
29
+ s.require_paths = ["lib"]
30
+ end
@@ -0,0 +1,22 @@
1
+ class Array
2
+
3
+ def get_rand(arr)
4
+ raise "Wrong number of arguments" unless arr.size == self.size
5
+ # raise "Currently working only for arrays smaller then 200 elements" if arr.size > 199
6
+ total = arr.inject { |x, y| x+y }
7
+ hash = { }
8
+ counter = (arr.size / 100)+ 1
9
+ self.each_with_index do |arg, i|
10
+ hash[arg] = ((arr[i].to_f / total.to_f) * counter * 100).round
11
+ end
12
+ array_to_load = []
13
+ hash.each_pair do |k,v|
14
+ v.times do
15
+ array_to_load << k
16
+ end
17
+ end
18
+ value = rand(3) - 1
19
+ array_to_load.sort { |x,y| rand(3)-1 }.first
20
+ end
21
+
22
+ end
@@ -0,0 +1,3 @@
1
+ module GuidedRandomness
2
+ VERSION = "0.1.1"
3
+ end
data/test/test.rb ADDED
@@ -0,0 +1,68 @@
1
+ require './lib/guided_randomness'
2
+ require 'test/unit'
3
+
4
+ class RandomnessTest < Test::Unit::TestCase
5
+
6
+ def test_first_check_randomness_using_law_of_big_numbers
7
+ @array = ["a", "b", "c", "d", "e"]
8
+ @chances = [10, 2, 8, 5, 9]
9
+ helper
10
+ calculate_chances
11
+ check_asserts(0.05)
12
+ end
13
+
14
+ def test_second_check_randomness_using_law_of_big_numbers
15
+ @array = ["a", "b", "c", "d", "e", "g", "h", "i", "j", "k"]
16
+ @chances = [0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1]
17
+ helper
18
+ calculate_chances
19
+ check_asserts(0.05)
20
+ end
21
+
22
+ def test_third_check_randomness_using_law_of_big_numbers
23
+ @array = (1..500).to_a
24
+ @chances = [0.1]*500
25
+ helper
26
+ calculate_chances
27
+ check_asserts(0.05)
28
+ end
29
+
30
+ def test_fourth_check_randomness_using_law_of_big_numbers
31
+ @array = (1..300).to_a
32
+ @chances = (1..300).to_a
33
+ helper
34
+ calculate_chances
35
+ check_asserts(0.05)
36
+ end
37
+
38
+
39
+
40
+ protected
41
+
42
+ def helper
43
+ @test_hash = {}
44
+ @array.each do |a|
45
+ @test_hash[a] = 0
46
+ end
47
+ @total = @chances.inject { |x, y| x + y }
48
+ end
49
+
50
+ def calculate_chances
51
+ 10000.times do
52
+ @test_hash[@array.get_rand(@chances)] += 1
53
+ end
54
+ @test_hash.each_pair do |k,v|
55
+ @test_hash[k] = v / 10000.0
56
+ end
57
+ @chances = @chances.map do |x|
58
+ x / @total.to_f
59
+ end
60
+ end
61
+
62
+ def check_asserts(deviation)
63
+ @array.each_with_index do |a, i|
64
+ assert (@test_hash[a] - @chances[i]).abs < deviation, "Devation should be lower then #{deviation}, and actually it is: #{(@test_hash[a] - @chances[i]).abs}"
65
+ end
66
+ end
67
+
68
+ end
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: guided_randomness
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.1
6
+ platform: ruby
7
+ authors:
8
+ - Piotr Esse Szmielew
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-05-12 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: "\n Usage:\n\n require 'guided_randomness'\n [1,2,3].get_rand([0.5, 0.3, 0.2])\n\n or\n require 'guided_randomness'\n [1,2,3].get_rand([4,12,9])\n "
17
+ email:
18
+ - p.szmielew@roflcopter.pl
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files: []
24
+
25
+ files:
26
+ - .gitignore
27
+ - Gemfile
28
+ - README
29
+ - Rakefile
30
+ - guided_randomness.gemspec
31
+ - lib/guided_randomness.rb
32
+ - lib/guided_randomness/version.rb
33
+ - test/test.rb
34
+ homepage: ""
35
+ licenses: []
36
+
37
+ post_install_message:
38
+ rdoc_options: []
39
+
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ required_rubygems_version: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ requirements: []
55
+
56
+ rubyforge_project: guided_randomness
57
+ rubygems_version: 1.8.0
58
+ signing_key:
59
+ specification_version: 3
60
+ summary: Simple gem for Ruby which extends Array class, and gave possibility to pick element from it at random, however with certain probability (probability is given for each element).
61
+ test_files:
62
+ - test/test.rb