Permutations: Difference between revisions

Content added Content deleted
(added langur language example)
m (→‎{{header|Langur}}: replace tabs with spaces)
Line 3,723: Line 3,723:
}
}


val .limit = 10
val .limit = 10
if len(.arr) > .limit {
if len(.arr) > .limit {
throw $"Permutation limit exceeded (currently \.limit;)"
throw $"Permutation limit exceeded (currently \.limit;)"
}
}


var .size = .factorial(len .arr)
var .size = .factorial(len .arr)
var .arrOf = [.arr]
var .arrOf = [.arr]


var .elements = .arr
var .elements = .arr
var .ordinals = series 1 .. len .elements
var .ordinals = series 1 .. len .elements


val .n = len(.ordinals)
val .n = len(.ordinals)
var (.i, .j)
var (.i, .j)


for .c = 1; .c < .size; .c += 1 {
for .c = 1; .c < .size; .c += 1 {
.i = .n - 1
.i = .n - 1
.j = .n
.j = .n
for .ordinals[.i] > .ordinals[.i+1] {
for .ordinals[.i] > .ordinals[.i+1] {
.i -= 1
.i -= 1
}
}
for .ordinals[.j] < .ordinals[.i] {
for .ordinals[.j] < .ordinals[.i] {
.j -=1
.j -=1
}
}


(.ordinals[.i], .ordinals[.j]) = (.ordinals[.j], .ordinals[.i])
(.ordinals[.i], .ordinals[.j]) = (.ordinals[.j], .ordinals[.i])
(.elements[.i], .elements[.j]) = (.elements[.j], .elements[.i])
(.elements[.i], .elements[.j]) = (.elements[.j], .elements[.i])


.j = .n
.j = .n
.i += 1
.i += 1
for ; .i < .j; .i+=1, .j-=1 {
for ; .i < .j; .i+=1, .j-=1 {
(.ordinals[.i], .ordinals[.j]) = (.ordinals[.j], .ordinals[.i])
(.ordinals[.i], .ordinals[.j]) = (.ordinals[.j], .ordinals[.i])
(.elements[.i], .elements[.j]) = (.elements[.j], .elements[.i])
(.elements[.i], .elements[.j]) = (.elements[.j], .elements[.i])
}
}
.arrOf = more .arrOf, .elements
.arrOf = more .arrOf, .elements
}
}


return .arrOf
return .arrOf
}
}