Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
39
Task/Permutations/Langur/permutations.langur
Normal file
39
Task/Permutations/Langur/permutations.langur
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
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 .elements = .arr
|
||||
var .ordinals = pseries len .elements
|
||||
|
||||
val .n = len(.ordinals)
|
||||
var .i, .j
|
||||
|
||||
for[.p=[.arr]] of .factorial(len .arr)-1 {
|
||||
.i = .n - 1
|
||||
.j = .n
|
||||
while .ordinals[.i] > .ordinals[.i+1] {
|
||||
.i -= 1
|
||||
}
|
||||
while .ordinals[.j] < .ordinals[.i] {
|
||||
.j -= 1
|
||||
}
|
||||
|
||||
.ordinals[.i], .ordinals[.j] = .ordinals[.j], .ordinals[.i]
|
||||
.elements[.i], .elements[.j] = .elements[.j], .elements[.i]
|
||||
|
||||
.i += 1
|
||||
for .j = .n; .i < .j ; .i, .j = .i+1, .j-1 {
|
||||
.ordinals[.i], .ordinals[.j] = .ordinals[.j], .ordinals[.i]
|
||||
.elements[.i], .elements[.j] = .elements[.j], .elements[.i]
|
||||
}
|
||||
.p = more .p, .elements
|
||||
}
|
||||
}
|
||||
|
||||
for .e in .permute([1, 3.14, 7]) {
|
||||
writeln .e
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue