unique_permutation 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/unique_permutation.rb +15 -18
- metadata +16 -18
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 44423676ed73ec4103c5f6cfefe5f3727938c2b2cd55535a158a00fd08088691
|
4
|
+
data.tar.gz: 0b1770be1d694c8003b641103e80e33fc1bb161f82a41a6e00bc6e410e59d980
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 84358188c1c306e031f83dd0aaa11a24cc6d12dc850828d653f8779fd9e408cf0ce8fc6fa235727dddfb40c6f47f25740200802fbf1261b17096537610f5df66
|
7
|
+
data.tar.gz: c2b1a296f976ef0141da685310a43779a06d583580124b166ce7387e4a977a4c37af5b849e94c596c74f0fe2a88e59dee78f575a7e5db629212f34e3db42fcf2
|
data/lib/unique_permutation.rb
CHANGED
@@ -2,31 +2,28 @@
|
|
2
2
|
# This is incredibly more efficient that the built in permutation method as duplicate elements will yield
|
3
3
|
# identical permutations.
|
4
4
|
|
5
|
+
# Based off of Algorithm L (Donald Knuth)
|
6
|
+
|
5
7
|
class Array
|
6
|
-
def unique_permutation
|
8
|
+
def unique_permutation # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
7
9
|
return enum_for(:unique_permutation) unless block_given?
|
8
10
|
|
9
|
-
array_copy =
|
11
|
+
array_copy = sort
|
10
12
|
yield array_copy.dup
|
11
|
-
return if size
|
12
|
-
|
13
|
-
while true
|
14
|
-
# Based off of Algorithm L (Donald Knuth)
|
15
|
-
j = size - 2;
|
16
|
-
j -= 1 while j > 0 && array_copy[j] >= array_copy[j+1]
|
13
|
+
return if size <= 1
|
17
14
|
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
loop do
|
16
|
+
j = size - 2
|
17
|
+
j -= 1 while j > 0 && array_copy[j] >= array_copy[j + 1]
|
18
|
+
break unless array_copy[j] < array_copy[j + 1]
|
21
19
|
|
22
|
-
|
23
|
-
|
20
|
+
l = size - 1
|
21
|
+
l -= 1 while array_copy[j] >= array_copy[l]
|
24
22
|
|
25
|
-
|
23
|
+
array_copy[j], array_copy[l] = array_copy[l], array_copy[j]
|
24
|
+
array_copy[(j + 1)..] = array_copy[(j + 1)..].reverse
|
26
25
|
|
27
|
-
|
28
|
-
break
|
29
|
-
end
|
26
|
+
yield array_copy.dup
|
30
27
|
end
|
31
28
|
end
|
32
|
-
end
|
29
|
+
end
|
metadata
CHANGED
@@ -1,45 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unique_permutation
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Aaron Rosenberg
|
9
|
-
autorequire:
|
8
|
+
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2020-09-07 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
|
-
description: Adds
|
13
|
+
description: Adds `Array#unique_permutation` method.
|
15
14
|
email: aarongrosenberg@gmail.com
|
16
15
|
executables: []
|
17
16
|
extensions: []
|
18
17
|
extra_rdoc_files: []
|
19
18
|
files:
|
20
19
|
- lib/unique_permutation.rb
|
21
|
-
homepage: https://github.com/
|
22
|
-
licenses:
|
23
|
-
|
20
|
+
homepage: https://github.com/agrberg/unique_permutation
|
21
|
+
licenses:
|
22
|
+
- MIT
|
23
|
+
metadata: {}
|
24
|
+
post_install_message:
|
24
25
|
rdoc_options: []
|
25
26
|
require_paths:
|
26
27
|
- lib
|
27
28
|
required_ruby_version: !ruby/object:Gem::Requirement
|
28
|
-
none: false
|
29
29
|
requirements:
|
30
|
-
- -
|
30
|
+
- - "~>"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
32
|
+
version: '2.6'
|
33
33
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
34
|
requirements:
|
36
|
-
- -
|
35
|
+
- - ">="
|
37
36
|
- !ruby/object:Gem::Version
|
38
37
|
version: '0'
|
39
38
|
requirements: []
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
summary: Create unique permutations from an array
|
39
|
+
rubygems_version: 3.1.2
|
40
|
+
signing_key:
|
41
|
+
specification_version: 4
|
42
|
+
summary: Find unique permutations from an array
|
45
43
|
test_files: []
|