59 lines
1.3 KiB
VB.net
59 lines
1.3 KiB
VB.net
' Recaman's sequence - vbscript - 04/08/2015
|
|
nx=15
|
|
h=1000
|
|
Wscript.StdOut.WriteLine "Recaman's sequence for the first " & nx & " numbers:"
|
|
Wscript.StdOut.WriteLine recaman("seq",nx)
|
|
Wscript.StdOut.WriteLine "The first duplicate number is: " & recaman("firstdup",0)
|
|
Wscript.StdOut.WriteLine "The number of terms to complete the range 0--->"& h &" is: "& recaman("numterm",h)
|
|
Wscript.StdOut.Write vbCrlf&".../...": zz=Wscript.StdIn.ReadLine()
|
|
|
|
function recaman(op,nn)
|
|
Dim b,d,h
|
|
Set b = CreateObject("Scripting.Dictionary")
|
|
Set d = CreateObject("Scripting.Dictionary")
|
|
list="0" : firstdup=0
|
|
if op="firstdup" then
|
|
nn=1000 : firstdup=1
|
|
end if
|
|
if op="numterm" then
|
|
h=nn : nn=10000000 : numterm=1
|
|
end if
|
|
ax=0 'a(0)=0
|
|
b.Add 0,1 'b(0)=1
|
|
s=0
|
|
for n=1 to nn-1
|
|
an=ax-n
|
|
if an<=0 then
|
|
an=ax+n
|
|
elseif b.Exists(an) then
|
|
an=ax+n
|
|
end if
|
|
ax=an 'a(n)=an
|
|
if not b.Exists(an) then b.Add an,1 'b(an)=1
|
|
if op="seq" then
|
|
list=list&" "&an
|
|
end if
|
|
if firstdup then
|
|
if d.Exists(an) then
|
|
recaman="a("&n&")="&an
|
|
exit function
|
|
else
|
|
d.Add an,1 'd(an)=1
|
|
end if
|
|
end if
|
|
if numterm then
|
|
if an<=h then
|
|
if not d.Exists(an) then
|
|
s=s+1
|
|
d.Add an,1 'd(an)=1
|
|
end if
|
|
if s>=h then
|
|
recaman=n
|
|
exit function
|
|
end if
|
|
end if
|
|
end if
|
|
next 'n
|
|
recaman=list
|
|
end function 'recaman
|