複数の列挙者を前進させる方法、または「しかし、fizzbuzzboozzはどうですか?」

StackOverflow https://stackoverflow.com/questions/4160422

  •  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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top