Self-describing numbers: Difference between revisions

m
→‎Phix: even faster
(→‎{{header|Phix}}: added generator)
m (→‎Phix: even faster)
Line 1,680:
f210000000000001000
g2100000000000001000
</pre>
===even faster===
Finishes in less than a tenth of a second
{{trans|Seed7}}
<lang Phix>procedure gen(integer n)
string aleph = tagset('9','0')&tagset('z','a')&tagset('Z','A')
integer ones := 0
while ones<=2
and ones<n-2 do
sequence digits = repeat(0,n),
counts = repeat(0,n)
digits[1] := n-2-ones
if digits[1]<>2 then
digits[digits[1]+1] := 1
digits[2] := 2
digits[3] := 1
else
digits[2] := (ones<>0)
digits[3] := 2
end if
for i=1 to n do
counts[digits[i]+1] += 1
end for
if counts=digits then
string s = ""
for i=1 to n do
integer di = digits[i]
s &= aleph[di+1]
end for
printf(1,"%s\n",s)
end if
ones += 1
end while
end procedure
for n=1 to 65 do
gen(n)
end for</lang>
{{out}}
as above plus
<pre>
h21000000000000001000
i210000000000000001000
...
z21000000000000000000000000000000001000
A210000000000000000000000000000000001000
...
Z2100000000000000000000000000000000000000000000000000000000001000
</pre>
 
7,795

edits