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.


#MAX=500000
Dim a.i(#MAX)
Dim b.b(1)
Dim c.b(1000)
FillMemory(@c(),1000,1,#PB_Byte)
 
If OpenConsole() : Else : End 1 : EndIf
For n_Count=0 To #MAX  
  If n_Count=0     
    a(n_Count)=0
  ElseIf a(n_Count-1)-n_Count>0 And b(a(n_Count-1)-n_Count)=0
    a(n_Count)=a(n_Count-1)-n_Count
  Else
    a(n_Count)=a(n_Count-1)+n_Count
  EndIf  
  If ArraySize(b())<a(n_Count) : ReDim b(a(n_Count)) : EndIf
  If b(a(n_Count))=1 And fitD=0 : fitD=n_Count : EndIf
  b(a(n_Count))=1  
  If CompareMemory(@b(),@c(),1000) And fit1000=0 : fit1000=n_Count : Break : EndIf  
Next
 
Print("First 15 terms: ") : For i=0 To 14 : Print(RSet(Str(a(i)),4)) : Next : PrintN("")
PrintN("First duplicate term : a("+Str(fitD)+") = "+Str(a(fitD)))
PrintN("Number of Recaman terms needed to generate all integers from [0..1000]: "+Str(fit1000))
Input()
End