RosettaCodeData/Task/Hamming-numbers/Ruby/hamming-numbers-1.rb

13 lines
344 B
Ruby

hamming = Enumerator.new do |yielder|
next_ham = 1
queues = [[ 2, []], [3, []], [5, []] ]
loop do
yielder << next_ham # or: yielder.yield(next_ham)
queues.each {|m,queue| queue << next_ham * m}
next_ham = queues.collect{|m,queue| queue.first}.min
queues.each {|m,queue| queue.shift if queue.first==next_ham}
end
end