Data update

This commit is contained in:
Ingy döt Net 2024-07-13 15:19:22 -07:00
parent 29a5eea0d4
commit 5c1bb7bfa9
2011 changed files with 35081 additions and 3229 deletions

View file

@ -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
}

View 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