Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
79
Task/Recamans-sequence/CLU/recamans-sequence.clu
Normal file
79
Task/Recamans-sequence/CLU/recamans-sequence.clu
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
% Recaman sequence
|
||||
recaman = cluster is new, fetch
|
||||
rep = array[int]
|
||||
|
||||
new = proc () returns (cvt)
|
||||
a: rep := rep$predict(0,1000000)
|
||||
rep$addh(a,0)
|
||||
return(a)
|
||||
end new
|
||||
|
||||
% Find the N'th element of the Recaman sequence
|
||||
fetch = proc (a: cvt, n: int) returns (int)
|
||||
if n > rep$high(a) then extend(a,n) end
|
||||
return(a[n])
|
||||
end fetch
|
||||
|
||||
% See if N has already been generated
|
||||
prev = proc (a: rep, n: int) returns (bool)
|
||||
for el: int in rep$elements(a) do
|
||||
if el = n then return(true) end
|
||||
end
|
||||
return(false)
|
||||
end prev
|
||||
|
||||
% Generate members of the sequence until 'top' is reached
|
||||
extend = proc (a: rep, top: int)
|
||||
while rep$high(a) < top do
|
||||
n: int := rep$high(a) + 1
|
||||
sub: int := a[n-1] - n
|
||||
add: int := a[n-1] + n
|
||||
if sub>0 cand ~prev(a, sub)
|
||||
then rep$addh(a, sub)
|
||||
else rep$addh(a, add)
|
||||
end
|
||||
end
|
||||
end extend
|
||||
end recaman
|
||||
|
||||
|
||||
start_up = proc ()
|
||||
po: stream := stream$primary_output()
|
||||
A: recaman := recaman$new()
|
||||
|
||||
% Print the first 15 members
|
||||
stream$puts(po, "First 15 items:")
|
||||
for i: int in int$from_to(0, 14) do
|
||||
stream$puts(po, " " || int$unparse(A[i]))
|
||||
end
|
||||
|
||||
% Find the first duplicated number
|
||||
begin
|
||||
i: int := 0
|
||||
while true do
|
||||
i := i + 1
|
||||
for j: int in int$from_to(0, i-1) do
|
||||
if A[i]=A[j] then exit found(i, A[i]) end
|
||||
end
|
||||
end
|
||||
end except when found(i, n: int):
|
||||
stream$putl(po, "\nFirst duplicated number: A("
|
||||
|| int$unparse(i) || ") = " || int$unparse(n))
|
||||
end
|
||||
|
||||
% Find the amount of terms needed to generate all integers 0..1000
|
||||
begin
|
||||
seen: array[bool] := array[bool]$fill(0,1001,false)
|
||||
left: int := 1001
|
||||
n: int := -1
|
||||
while left > 0 do
|
||||
n := n + 1
|
||||
if A[n] <= 1000 cand ~seen[A[n]] then
|
||||
left := left - 1
|
||||
seen[A[n]] := true
|
||||
end
|
||||
end
|
||||
stream$putl(po, "Terms needed to generate [0..1000]: "
|
||||
|| int$unparse(n))
|
||||
end
|
||||
end start_up
|
||||
Loading…
Add table
Add a link
Reference in a new issue