tree_permute 0.1.0

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/Manifest ADDED
@@ -0,0 +1,4 @@
1
+ README.rdoc
2
+ Rakefile
3
+ lib/tree_permute.rb
4
+ Manifest
data/README.rdoc ADDED
@@ -0,0 +1,15 @@
1
+ = TreePermute
2
+ is a gem that add to the Array methods to give it the tree_permute method. The method returns an array of
3
+ permutations without any duplicates. The method performs faster than the built in permutation function of
4
+ Class Array.
5
+
6
+ == Install
7
+ gem install tree_permute
8
+
9
+ == Usage
10
+ If you have an array of objects example: arr = ['1', 1, phong, phong, 1, 30]
11
+
12
+ just call: arr.tree_permute
13
+
14
+ the call returns an array of permutations without any duplicate permutation that would be returned
15
+ with the call: arr.permutation
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new('tree_permute', '0.1.0') do |p|
6
+ p.description = "Generate an array of permutations without duplicates using a tree"
7
+ p.url = "http://github.com/phongsi/tree_permute"
8
+ p.author = "Phong Si"
9
+ p.email = "phong.si@gmail.com"
10
+ p.ignore_pattern = ["tmp/*", "script/*"]
11
+ p.development_dependencies = []
12
+ end
13
+
14
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
@@ -0,0 +1,35 @@
1
+ # Code by Phong Si
2
+ # builds a tree to find all unique permutations of a given array without duplicates
3
+ module TreePermute
4
+ def tree_permute
5
+ set = self.sort
6
+ arr = Array.new
7
+ arr << []
8
+ set.each do |element|
9
+ if arr.last.last.eql?(element)
10
+ arr.last << element
11
+ else
12
+ arr << [element]
13
+ end
14
+ end
15
+ arr.delete_at(0)
16
+ empty_sets = Array.new
17
+ arr.size.times {empty_sets << []}
18
+ buildPerms(arr, empty_sets, Array.new, Array.new)
19
+ end
20
+ private
21
+ def buildPerms(arr, empty_sets, permutations, permutation)
22
+ if (arr.eql?(empty_sets))
23
+ permutations << permutation.dup
24
+ else
25
+ arr.each do |subset|
26
+ if !subset.empty?
27
+ permutation << subset.pop
28
+ buildPerms(arr, empty_sets, permutations, permutation)
29
+ subset << permutation.pop
30
+ end
31
+ end
32
+ end
33
+ return permutations
34
+ end
35
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "tree_permute"
5
+ s.version = "0.1.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Phong Si"]
9
+ s.date = "2011-10-04"
10
+ s.description = "Generate an array of permutations without duplicates using a tree"
11
+ s.email = "phong.si@gmail.com"
12
+ s.extra_rdoc_files = ["README.rdoc", "lib/tree_permute.rb"]
13
+ s.files = ["README.rdoc", "Rakefile", "lib/tree_permute.rb", "Manifest", "tree_permute.gemspec"]
14
+ s.homepage = "http://github.com/phongsi/tree_permute"
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Tree_permute", "--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = "tree_permute"
18
+ s.rubygems_version = "1.8.11"
19
+ s.summary = "Generate an array of permutations without duplicates using a tree"
20
+
21
+ if s.respond_to? :specification_version then
22
+ s.specification_version = 3
23
+
24
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
25
+ else
26
+ end
27
+ else
28
+ end
29
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tree_permute
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - Phong Si
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-10-04 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: Generate an array of permutations without duplicates using a tree
17
+ email: phong.si@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ - lib/tree_permute.rb
25
+ files:
26
+ - README.rdoc
27
+ - Rakefile
28
+ - lib/tree_permute.rb
29
+ - Manifest
30
+ - tree_permute.gemspec
31
+ homepage: http://github.com/phongsi/tree_permute
32
+ licenses: []
33
+
34
+ post_install_message:
35
+ rdoc_options:
36
+ - --line-numbers
37
+ - --inline-source
38
+ - --title
39
+ - Tree_permute
40
+ - --main
41
+ - README.rdoc
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "1.2"
56
+ requirements: []
57
+
58
+ rubyforge_project: tree_permute
59
+ rubygems_version: 1.8.11
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: Generate an array of permutations without duplicates using a tree
63
+ test_files: []
64
+