39 lines
854 B
Plaintext
39 lines
854 B
Plaintext
link printf
|
|
|
|
procedure main()
|
|
every L := !longestselfrefseq(1000000) do
|
|
every printf(" %i : %i\n",i := 1 to *L,L[i])
|
|
end
|
|
|
|
|
|
procedure longestselfrefseq(N) #: find longest sequences from 1 to N
|
|
|
|
mlen := 0
|
|
every L := selfrefseq(n := 1 to N) do {
|
|
if mlen <:= *L then
|
|
ML := [L]
|
|
else if mlen = *L then
|
|
put(ML,L)
|
|
}
|
|
|
|
return ML
|
|
end
|
|
|
|
procedure selfrefseq(n) #: return list of sequence oeis:A036058 for seed n
|
|
S := set()
|
|
L := []
|
|
every p := seq(1) do
|
|
if member(S,n) then return L # ends at a repeat
|
|
else {
|
|
insert(S,n)
|
|
put(L,n)
|
|
n := nextselfrefseq(n)
|
|
}
|
|
end
|
|
|
|
procedure nextselfrefseq(n) #: return next element of sequence oeis:A036058
|
|
every (Counts := table(0))[integer(!n)] +:= 1 # count digits
|
|
every (n := "") ||:= (0 < Counts[i := 9 to 0 by -1]) || i # assemble counts
|
|
return integer(n)
|
|
end
|