Skip to content

Commit 9746c38

Browse files
committed
fix issues with the permutation method
1 parent 07cec32 commit 9746c38

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

src/array/init.lua

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,10 @@ array = {
5656
utils.raises_error(array, obj, 'slice')
5757

5858
if array.is_empty(obj) or start == finish then return {} end
59+
local _finish = finish or (#obj + 1)
5960

6061
local output = {}
61-
for i = (start or 1), (finish or #obj) do
62+
for i = (start or 1), (_finish - 1) do
6263
table.insert(output, obj[i])
6364
end
6465

@@ -581,33 +582,28 @@ array = {
581582
-- @param obj {table}
582583
-- @return {table}
583584
permutation = function(obj)
585+
local output = {}
586+
584587
if #obj == 1 then
585588
return { obj }
586589
end
587590

588-
local output = {}
589-
local partial_list = array.permutation(array.slice(obj, 2))
590-
local first = { obj[1] }
591+
local partial_permutations = array.permutation(array.slice(obj, 2))
592+
local first = obj[1]
591593

592-
for i=1, #partial_list do
593-
local partial = partial_list[i]
594+
for i=1, #partial_permutations do
595+
local partial = partial_permutations[i]
594596

595597
for j=1, #partial+1 do
596-
local merged = array.concat(
597-
array.slice(partial, 1, j),
598-
first,
599-
array.slice(partial, j)
600-
)
598+
local permutation_front = array.slice(partial, 1, j)
599+
local permutation_after = array.slice(partial, j)
601600

602-
table.insert(
603-
output,
604-
merged
605-
)
601+
table.insert(output, array.concat(permutation_front, { first }, permutation_after))
606602
end
607603
end
608604

609605
return output
610-
end,
606+
end
611607
}
612608

613609
return array

0 commit comments

Comments
 (0)