20 lines
688 B
Python
20 lines
688 B
Python
def s_permutations(seq):
|
|
def s_perm(seq):
|
|
if not seq:
|
|
return [[]]
|
|
else:
|
|
new_items = []
|
|
for i, item in enumerate(s_perm(seq[:-1])):
|
|
if i % 2:
|
|
# step up
|
|
new_items += [item[:i] + seq[-1:] + item[i:]
|
|
for i in range(len(item) + 1)]
|
|
else:
|
|
# step down
|
|
new_items += [item[:i] + seq[-1:] + item[i:]
|
|
for i in range(len(item), -1, -1)]
|
|
return new_items
|
|
|
|
return [(tuple(item), -1 if i % 2 else 1)
|
|
for i, item in enumerate(s_perm(seq))]
|