The Recamán's sequence generates Natural numbers.

Starting from a(0)=0, the n'th term a(n), where n>0, is the previous term minus n i.e a(n) = a(n-1) - n but only if this is both positive and has not been previousely generated.


If the conditions don't hold then a(n) = a(n-1) + n.



Task

 Generate and show here the first 15 members of the sequence.
 Find and show here, the first duplicated number in the sequence.
 Optionally: Find and show here, how many terms of the sequence are needed until all the integers 0..1000, inclusive, are generated.


References

 A005132, The On-Line Encyclopedia of Integer Sequences.
 The Slightly Spooky Recamán Sequence, Numberphile video.
 Recamán's sequence, on Wikipedia.


recamanSucc: function [seen, n, r].memoize[
    back: r - n
    (or? 0 > back contains? seen back)? -> n + r
                                        -> back
]
 
recamanUntil: function [p][
    n: new 1
    r: 0
    rs: new @[r]
    seen: rs
    blnNew: true
    while [not? do p][
        r: recamanSucc seen n r
        blnNew: not? in? r seen
        seen: unique seen ++ r
        'rs ++ r
        inc 'n
    ]
    return rs
]
 
print "First 15 Recaman numbers:"
print recamanUntil [n = 15]
 
print ""
print "First duplicate Recaman number:"
print last recamanUntil [not? blnNew]