複数の列挙者を前進させる方法、または「しかし、fizzbuzzboozzはどうですか?」
-
08-10-2019 - |
質問
これはクラシックを行うためのかなり非正統的な方法です フィズバズエクササイズ, 、しかし、それは問題を説明するためだけです(そして、ちょっと、あなたが10億人にフィズバズしたいなら、それは速いかもしれません)。
fizzer = ( Array.new( 2, '' ) << 'Fizz' ).cycle
buzzer = ( Array.new( 4, '' ) << 'Buzz' ).cycle
(1..100).each do |number|
fizzbuzz = fizzer.next + buzzer.next # this line is giving me problems.
puts ( fizzbuzz.empty? ? number : fizzbuzz )
end
このコードを一般化して、{3 => 'fizz'、5 => 'buzz'、7 => 'boozz'のようなハッシュを受け入れる方法?
解決
フィザ、ブザー、ブーザーズの配列を作成します。次に、ループ呼び出しで next
その配列の各fooerで、結果を合わせて inject
:
# The sort is needed so it prints fizzbuzz, not buzzfizz
# (hashes being unordered and all)
fooers = the_hash.sort_by {|k,v| k}.map do |k,v|
( Array.new(k - 1, '') << v ).cycle
end
(1..100).each do |number|
fizzbuzz = fooers.map(&:next).inject(:+)
puts ( fizzbuzz.empty? ? number : fizzbuzz )
end
所属していません StackOverflow