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

13 lines
344 B
Ruby
Raw Permalink Normal View History

2015-02-20 00:35:01 -05:00
hamming = Enumerator.new do |yielder|
2013-04-10 21:29:02 -07:00
next_ham = 1
2015-02-20 00:35:01 -05:00
queues = [[ 2, []], [3, []], [5, []] ]
2013-04-10 21:29:02 -07:00
loop do
2015-02-20 00:35:01 -05:00
yielder << next_ham # or: yielder.yield(next_ham)
2013-04-10 21:29:02 -07:00
2015-02-20 00:35:01 -05:00
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}
2013-04-10 21:29:02 -07:00
end
end