Data update
This commit is contained in:
parent
29a5eea0d4
commit
5c1bb7bfa9
2011 changed files with 35081 additions and 3229 deletions
|
|
@ -1,39 +1,39 @@
|
|||
val .factorial = fn(.x) if(.x < 2: 1; .x * self(.x - 1))
|
||||
val factorial = fn x:if(x < 2: 1; x * fn((x - 1)))
|
||||
|
||||
val .permute = fn(.list) {
|
||||
if .list is not list: throw "expected list"
|
||||
val permute = fn(plist) {
|
||||
if plist is not list: throw "expected list"
|
||||
|
||||
val .limit = 10
|
||||
if len(.list) > .limit: throw $"permutation limit exceeded (currently \.limit;)"
|
||||
val limit = 10
|
||||
if len(plist) > limit: throw "permutation limit exceeded (currently {{limit}})"
|
||||
|
||||
var .elements = .list
|
||||
var .ordinals = pseries len .elements
|
||||
var elements = plist
|
||||
var ordinals = pseries(len(elements))
|
||||
|
||||
val .n = len(.ordinals)
|
||||
var .i, .j
|
||||
val n = len(ordinals)
|
||||
var i, j
|
||||
|
||||
for[.p=[.list]] of .factorial(len .list)-1 {
|
||||
.i = .n - 1
|
||||
.j = .n
|
||||
while .ordinals[.i] > .ordinals[.i+1] {
|
||||
.i -= 1
|
||||
for[p=[plist]] of factorial(len(plist))-1 {
|
||||
i = n - 1
|
||||
j = n
|
||||
while ordinals[i] > ordinals[i+1] {
|
||||
i -= 1
|
||||
}
|
||||
while .ordinals[.j] < .ordinals[.i] {
|
||||
.j -= 1
|
||||
while ordinals[j] < ordinals[i] {
|
||||
j -= 1
|
||||
}
|
||||
|
||||
.ordinals[.i], .ordinals[.j] = .ordinals[.j], .ordinals[.i]
|
||||
.elements[.i], .elements[.j] = .elements[.j], .elements[.i]
|
||||
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]
|
||||
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
|
||||
p = more(p, elements)
|
||||
}
|
||||
}
|
||||
|
||||
for .e in .permute([1, 3.14, 7]) {
|
||||
writeln .e
|
||||
for e in permute([1, 3.14, 7]) {
|
||||
writeln e
|
||||
}
|
||||
|
|
|
|||
6
Task/Permutations/Uiua/permutations.uiua
Normal file
6
Task/Permutations/Uiua/permutations.uiua
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
# Takes strict range 0..<n and generates n! permutations
|
||||
# (from https://github.com/Omnikar/uiua-math/blob/main/lib.ua).
|
||||
Perms ← ☇1⍉∧(≡↻⇡⟜↯+1⟜⊂):¤¤°⊂
|
||||
|
||||
Permute ← ≡⊏⊙¤⊸(Perms⇡⧻) # Generalised helper function.
|
||||
⟜⧻Permute {"this" "is" "fine"} # Yoda simulator
|
||||
Loading…
Add table
Add a link
Reference in a new issue