30 lines
1.1 KiB
Plaintext
30 lines
1.1 KiB
Plaintext
link strings # to get csort()
|
|
|
|
procedure main(A)
|
|
limit := A[1] | 1000000 # Allow alternate limit
|
|
mSq := 0
|
|
# May have multiple 'unique' sequence sets (unrelated seeds) so use table
|
|
every s := [n := 1 to limit, sequence(n)] do {
|
|
if mSq <:= *s[2] then mT := table() # new max, start over
|
|
if mSq == *s[2] then insert((/mT[n := csort(n)] := set()) | mT[n],s)
|
|
}
|
|
dumpSequences(mT)
|
|
end
|
|
|
|
procedure sequence(n) # produce sequence of SDS with seed n
|
|
every (repeats := [], iter := seq(), put(repeats, n)) do
|
|
if (n := nElem(n)) == !repeats then return repeats # Converged
|
|
end
|
|
|
|
procedure nElem(n) # given n, produce its self-description
|
|
every (n1 := "", c := !cset(n)) do
|
|
(every (d := 0) +:= (upto(c, n),1)) | (n1 := d||c||n1)
|
|
return n1
|
|
end
|
|
|
|
procedure dumpSequences(seqTab) # Show each 'unique' sequence in table
|
|
every writes("Seeds:" | (!!seqTab)[1], " ")
|
|
write("\n\nIterations: ",*(!!seqTab)[2])
|
|
every s := !seqTab do (write() & every write(!(!s\1)[2]))
|
|
end
|