Van Eck sequence: Difference between revisions
Content added Content deleted
(Added Algol 68) |
(Added Algol W) |
||
Line 471: | Line 471: | ||
<pre>0 0 1 0 2 0 2 2 1 6 |
<pre>0 0 1 0 2 0 2 2 1 6 |
||
4 7 30 25 67 225 488 0 10 136</pre> |
4 7 30 25 67 225 488 0 10 136</pre> |
||
=={{header|ALGOL W}}== |
|||
<lang algolw>begin % find elements of the Van Eck Sequence - first term is 0, following % |
|||
% terms are 0 if the previous was the first appearance of the element % |
|||
% or how far back in the sequence the last element appeared % |
|||
% sets s to the first n elements of the Van Eck sequence % |
|||
procedure VanEck ( integer array s ( * ) ; integer value n ) ; |
|||
begin |
|||
integer array pos ( 0 :: n ); |
|||
for i := 1 until n do s( i ) := 0; |
|||
for i := 0 until n do pos( i ) := 0; |
|||
for i := 2 until n do begin |
|||
integer j, prev; |
|||
j := i - 1; |
|||
prev := s( j ); |
|||
if pos( prev ) not = 0 then begin |
|||
% not a new element % |
|||
s( i ) := j - pos( prev ) |
|||
end if_pos_prev_ne_0 ; |
|||
pos( prev ) := j |
|||
end for_j; |
|||
end VanEck ; |
|||
% construct the first 1000 terms of the sequence % |
|||
integer MAX_VAN_ECK; |
|||
MAX_VAN_ECK := 1000; |
|||
begin |
|||
integer array seq ( 1 :: MAX_VAN_ECK ); |
|||
VanEck( seq, MAX_VAN_ECK ); |
|||
% show the first and last 10 elements % |
|||
for i := 1 until 10 do writeon( i_w := 1, s_w := 0, " ", seq( i ) ); |
|||
write(); |
|||
for i := MAX_VAN_ECK - 9 until MAX_VAN_ECK do writeon( i_w := 1, s_w := 0, " ", seq( i ) ); |
|||
write() |
|||
end |
|||
end.</lang> |
|||
{{out}} |
|||
<pre> |
|||
0 0 1 0 2 0 2 2 1 6 |
|||
4 7 30 25 67 225 488 0 10 136 |
|||
</pre> |
|||
=={{header|AppleScript}}== |
=={{header|AppleScript}}== |