permutation_generator 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/README ADDED
@@ -0,0 +1,18 @@
1
+ = PermutationGenerator
2
+ == Install
3
+ $ sudo gem install permutation_generator
4
+
5
+ == Usage
6
+ require 'rubygems'
7
+ require 'permutation_generator'
8
+ PermutationGenerator.new(2, ["r", "b", "g"]).each do |element|
9
+ p element
10
+ end
11
+
12
+ # output -- ["r", "r"] ["r", "b"] ["r", "g"] ["b", "r"] ["b", "b"] ["b", "g"] ["g", "r"] ["g", "b"] ["g", "g"]
13
+
14
+
15
+ Copyright (c) 2010 MIT-LICENSE
16
+ Author : Wayne Deng
17
+ Web : http://blog.waynedeng.com
18
+ Email : wayne.deng.cn(AT).com
@@ -0,0 +1,40 @@
1
+ class PermutationGenerator
2
+ attr_accessor :size, :elements
3
+
4
+ def initialize(picking_size, elements)
5
+ self.elements = elements
6
+ self.size = picking_size
7
+ end
8
+
9
+ def each (&block)
10
+ (1..self.permutation_size).each do |i|
11
+ yield self.ary(i-1)
12
+ end
13
+ end
14
+
15
+ def each_with_index (&block)
16
+ (1..self.permutation_size).each do |i|
17
+ yield self.ary(i-1), i-1
18
+ end
19
+ end
20
+
21
+ def permutation_size
22
+ self.elements.size ** self.size
23
+ end
24
+
25
+ protected
26
+ def ary(case_index)
27
+ self.index_ary(case_index).map{|i| self.elements[i]}
28
+ end
29
+
30
+ def index_ary(case_index)
31
+ _ary = []
32
+ _value = case_index
33
+ (1..self.size).each do |i|
34
+ _ary[i - 1], _value = (_value % self.elements.size), (_value / self.elements.size).to_i
35
+ end
36
+ _ary.reverse
37
+ end
38
+
39
+ end
40
+
@@ -0,0 +1,15 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{permutation_generator}
3
+ s.version = "0.1.1"
4
+
5
+ s.authors = ["Wayne Deng"]
6
+ s.date = %q{2010-09-20}
7
+ s.platform = Gem::Platform::RUBY
8
+ s.summary = "generate permutation list in Ruby"
9
+ s.description = "Permutation Generator"
10
+ s.email = %q{wayne.deng.cn@gmail.com}
11
+ s.homepage = %q{http://blog.waynedeng.com}
12
+ s.files = ["test/test_permutation_generator.rb", "README", "lib/permutation_generator.rb", "permutation_generator.gemspec"]
13
+ s.require_paths = ["lib"]
14
+
15
+ end
@@ -0,0 +1,16 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.join(File.dirname(__FILE__),"..","lib","permutation_generator.rb")
3
+ require 'test/unit'
4
+
5
+ class TestPermutationGenerator < Test::Unit::TestCase
6
+ def test_each
7
+ ary = []
8
+ PermutationGenerator.new(2, [1,2,3]).each{|ai| ary << ai}
9
+ assert_equal ary, [[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1],[3,2],[3,3]]
10
+
11
+ ary = []
12
+ PermutationGenerator.new(2, ["a", "b"]).each{|ai| ary << ai}
13
+ assert_equal ary, [["a","a"],["a","b"],["b","a"],["b", "b"]]
14
+
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: permutation_generator
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 1
9
+ version: 0.1.1
10
+ platform: ruby
11
+ authors:
12
+ - Wayne Deng
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-09-20 00:00:00 +08:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Permutation Generator
22
+ email: wayne.deng.cn@gmail.com
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - test/test_permutation_generator.rb
31
+ - README
32
+ - lib/permutation_generator.rb
33
+ - permutation_generator.gemspec
34
+ has_rdoc: true
35
+ homepage: http://blog.waynedeng.com
36
+ licenses: []
37
+
38
+ post_install_message:
39
+ rdoc_options: []
40
+
41
+ require_paths:
42
+ - lib
43
+ required_ruby_version: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ segments:
48
+ - 0
49
+ version: "0"
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ requirements: []
58
+
59
+ rubyforge_project:
60
+ rubygems_version: 1.3.6
61
+ signing_key:
62
+ specification_version: 3
63
+ summary: generate permutation list in Ruby
64
+ test_files: []
65
+