Class: Array
- Inherits:
-
Object
- Object
- Array
- Defined in:
- lib/unique_permutation.rb
Overview
Based off of Algorithm L (Donald Knuth)
Instance Method Summary collapse
-
#unique_permutation {|array_copy.dup| ... } ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength.
Instance Method Details
#unique_permutation {|array_copy.dup| ... } ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/MethodLength
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/unique_permutation.rb', line 8 def unique_permutation # rubocop:disable Metrics/AbcSize, Metrics/MethodLength return enum_for(:unique_permutation) unless block_given? array_copy = sort yield array_copy.dup return if size <= 1 loop do j = size - 2 j -= 1 while j > 0 && array_copy[j] >= array_copy[j + 1] break unless array_copy[j] < array_copy[j + 1] l = size - 1 l -= 1 while array_copy[j] >= array_copy[l] array_copy[j], array_copy[l] = array_copy[l], array_copy[j] array_copy[(j + 1)..] = array_copy[(j + 1)..].reverse yield array_copy.dup end end |