|
class VenEch
|
|
include Enumerable
|
|
|
|
def initialize()
|
|
@i = 0;
|
|
@val = 0;
|
|
@seen = {};
|
|
end
|
|
|
|
def add_num num
|
|
@val = @i - @seen.fetch(num, @i)
|
|
@seen[num] = @i
|
|
@i += 1
|
|
end
|
|
|
|
def each(&block)
|
|
loop { block.call(@val); add_num @val }
|
|
end
|
|
end
|
|
|
|
ve = VenEch.new.take(1000)
|
|
p ve.first(10), ve.last(10)
|