The sequence is generated by following this pseudo-code:

A:  The first term is zero.
    Repeatedly apply:
        If the last term is *new* to the sequence so far then:
B:          The next term is zero.
        Otherwise:
C:          The next term is how far back this last term occured previously.



Example

Using A:

0
Using B:

0 0
Using C:

0 0 1
Using B:

0 0 1 0
Using C: (zero last occurred two steps back - before the one)

0 0 1 0 2
Using B:

0 0 1 0 2 0
Using C: (two last occurred two steps back - before the zero)

0 0 1 0 2 0 2 2
Using C: (two last occurred one step back)

0 0 1 0 2 0 2 2 1
Using C: (one last appeared six steps back)

0 0 1 0 2 0 2 2 1 6
...



Task

 Create a function/procedure/method/subroutine/... to generate the Van Eck sequence of numbers.
 Use it to display here, on this page:
 The first ten terms of the sequence.
 Terms 991 - to - 1000 of the sequence.


References

 Don't Know (the Van Eck Sequence) - Numberphile video.
 Wikipedia Article: Van Eck's Sequence.
  OEIS sequence: A181391.


include "cowgol.coh";
 
sub print_list(ptr: [uint16], n: uint8) is
    while n > 0 loop
        print_i16([ptr]);
        print_char(' ');
        n := n - 1;
        ptr := @next ptr;
    end loop;
    print_nl();
end sub;
 
const LIMIT := 1000;
var eck: uint16[LIMIT];
MemZero(&eck as [uint8], @bytesof eck);
var i: @indexof eck;
var j: @indexof eck;
 
i := 0;
while i < LIMIT-1 loop
    j := i-1;
    while j != -1 loop
        if eck[i] == eck[j] then
            eck[i+1] := i-j;
            break;
        end if;
        j := j - 1;
    end loop;
    i := i + 1;
end loop;
 
print_list(&eck[0], 10);
print_list(&eck[LIMIT-10], 10);