Permutations: Difference between revisions
Content added Content deleted
Langurmonkey (talk | contribs) (removed langur language example (for the moment)) |
Langurmonkey (talk | contribs) (added langur language example) |
||
Line 3,713: | Line 3,713: | ||
[d, c, b, a] |
[d, c, b, a] |
||
</pre> |
</pre> |
||
=={{header|Langur}}== |
|||
{{trans|Go}} |
|||
<lang Langur>val .factorial = f if(.x < 2: 1; .x x self(.x - 1)) |
|||
val .permute = f(.arr) { |
|||
if not isArray(.arr) { |
|||
throw "expected array" |
|||
} |
|||
val .limit = 10 |
|||
if len(.arr) > .limit { |
|||
throw $"Permutation limit exceeded (currently \.limit;)" |
|||
} |
|||
var .size = .factorial(len .arr) |
|||
var .arrOf = [.arr] |
|||
var .elements = .arr |
|||
var .ordinals = series 1 .. len .elements |
|||
val .n = len(.ordinals) |
|||
var (.i, .j) |
|||
for .c = 1; .c < .size; .c += 1 { |
|||
.i = .n - 1 |
|||
.j = .n |
|||
for .ordinals[.i] > .ordinals[.i+1] { |
|||
.i -= 1 |
|||
} |
|||
for .ordinals[.j] < .ordinals[.i] { |
|||
.j -=1 |
|||
} |
|||
(.ordinals[.i], .ordinals[.j]) = (.ordinals[.j], .ordinals[.i]) |
|||
(.elements[.i], .elements[.j]) = (.elements[.j], .elements[.i]) |
|||
.j = .n |
|||
.i += 1 |
|||
for ; .i < .j; .i+=1, .j-=1 { |
|||
(.ordinals[.i], .ordinals[.j]) = (.ordinals[.j], .ordinals[.i]) |
|||
(.elements[.i], .elements[.j]) = (.elements[.j], .elements[.i]) |
|||
} |
|||
.arrOf = more .arrOf, .elements |
|||
} |
|||
return .arrOf |
|||
} |
|||
for .e in .permute([1, 3.14, 7]) { |
|||
writeln .e |
|||
}</lang> |
|||
{{out}} |
|||
<pre>[1, 3.14, 7] |
|||
[1, 7, 3.14] |
|||
[3.14, 1, 7] |
|||
[3.14, 7, 1] |
|||
[7, 1, 3.14] |
|||
[7, 3.14, 1]</pre> |
|||
=={{header|LFE}}== |
=={{header|LFE}}== |