代码之家  ›  专栏  ›  技术社区  ›  steenslag

如何推进多个枚举器,或者“但是,关于fizzbuzzboozz呢?“

  •  2
  • steenslag  · 技术社区  · 14 年前

    这是一个相当不正统的方式来做经典 FizzBuzz exercise 但这只是为了说明问题(嘿,如果你想迅速达到十亿分之一的话,可能会很快)。

    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'?

    1 回复  |  直到 14 年前
        1
  •  3
  •   sepp2k    14 年前

    next 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
    
    推荐文章