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 +4 -0
- data/README.rdoc +15 -0
- data/Rakefile +14 -0
- data/lib/tree_permute.rb +35 -0
- data/tree_permute.gemspec +29 -0
- metadata +64 -0
data/Manifest
ADDED
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 }
|
data/lib/tree_permute.rb
ADDED
@@ -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
|
+
|