19 lines
515 B
CoffeeScript
19 lines
515 B
CoffeeScript
# Returns a copy of an array with the element at a specific position
|
|
# removed from it.
|
|
arrayExcept = (arr, idx) ->
|
|
res = arr[0..]
|
|
res.splice idx, 1
|
|
res
|
|
|
|
# The actual function which returns the permutations of an array-like
|
|
# object (or a proper array).
|
|
permute = (arr) ->
|
|
arr = Array::slice.call arr, 0
|
|
return [[]] if arr.length == 0
|
|
|
|
permutations = (for value,idx in arr
|
|
[value].concat perm for perm in permute arrayExcept arr, idx)
|
|
|
|
# Flatten the array before returning it.
|
|
[].concat permutations...
|