tree_permute 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+