LoginSignup
1
1

More than 5 years have passed since last update.

条件分岐をしないFizzBuzz

Posted at

最近FizzBuzzをよく見かける季節になってきたので

おそらく高速なFizzBuzzを

def fizzbuzz(max)
  fb_count, rest = max.divmod 15
  last_fb = fb_count * 15
  r = 1.step(last_fb, 15).reduce(''){|memo, n|
    memo += <<~StrFizzBuzz
      #{n}
      #{n+1}
      Fizz
      #{n+3}
      Buzz
      Fizz
      #{n+6}
      #{n+7}
      Fizz
      Buzz
      #{n+10}
      Fizz
      #{n+12}
      #{n+13}
      FizzBuzz
    StrFizzBuzz
  }
  rest_start = last_fb + 1
  rest_array = Array.new(rest){|i| rest_start + i}
  3.step(rest, 3){|n| rest_array[n-1] = 'Fizz' }
  5.step(rest, 5){|n| rest_array[n-1] = 'Buzz' }
  r + rest_array.join("\n")
end

puts fizzbuzz(100)

工夫した点

  • FizzBuzzは15要素ずつ変換する事ができるので一気に
  • 後半の余り部分もstepだけで乗り切る

ベンチマークは

後でやる

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1