2

これは、古典的なFizzBu​​zz演習を行うためのかなり非正統的な方法ですが、問題を説明するためのものです (そして、10 億まで fizzbuzz したい場合は、高速になる可能性があります)。

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'} のようなハッシュを受け入れるようにこのコードを一般化する方法は?

4

1 に答える 1

3

Fizzers、Buzzers、およびBoozzersの配列を作成します。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
于 2010-11-12T00:19:51.477 に答える