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.


function recaman()
    a = Vector{Int}([0])
    used = Dict{Int, Bool}(0 => true)
    used1000 = Set(0)
    founddup = false
    termcount = 1
    while length(used1000) <= 1000
        nextterm = a[termcount] - termcount
        if nextterm < 1 || haskey(used, nextterm)
            nextterm += termcount + termcount
        end
        push!(a, nextterm)
        if !haskey(used, nextterm)
            used[nextterm] = true
            if 1 <= nextterm <= 1000
                push!(used1000, nextterm)
            end
        elseif !founddup
            println("The first duplicated term is a[$(termcount + 1)] = $nextterm.")
            founddup = true
        end
        if termcount == 14
            println("The first 15 terms of the Recaman sequence are $a")
        end
        termcount += 1
    end
    println("Terms up to $(termcount - 1) are needed to generate 0 to 1000.")
end
 
recaman()
 