Permutations: Difference between revisions

Content added Content deleted
(removed langur language example (for the moment))
(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}}==