23 lines
677 B
Text
23 lines
677 B
Text
function johnsontrotter(low, high)
|
|
function permutelevel(vec)
|
|
if length(vec) < 2
|
|
return [vec]
|
|
end
|
|
sequences = []
|
|
endint = vec[end]
|
|
smallersequences = permutelevel(vec[1:end-1])
|
|
leftward = true
|
|
for seq in smallersequences
|
|
for pos in (leftward ? (length(seq)+1:-1:1): (1:length(seq)+1))
|
|
push!(sequences, insert!(copy(seq), pos, endint))
|
|
end
|
|
leftward = !leftward
|
|
end
|
|
sequences
|
|
end
|
|
permutelevel(collect(low:high))
|
|
end
|
|
|
|
for (i, sequence) in enumerate(johnsontrotter(1,4))
|
|
println("""$sequence, $(i & 1 == 1 ? "+1" : "-1")""")
|
|
end
|