すこし工夫をしてみた方法を3つ書いてみました。
fb.rb
ruby
1def fizz_buzz(num)
2 case
3 when (num % 15).zero?
4 'FizzBuzz'
5 when (num % 3).zero?
6 'Fizz'
7 when (num % 5).zero?
8 'Buzz'
9 else
10 num.to_s
11 end
12end
13
14def fizz_buzz_1(num)
15 case num % 15
16 when 0
17 'FizzBuzz'
18 when 3, 6, 9, 12
19 'Fizz'
20 when 5, 10
21 'Buzz'
22 else
23 num.to_s
24 end
25end
26
27def fizz_buzz_2(num)
28 case num % 15
29 when 0
30 'FizzBuzz'
31 when *((1..14).select { |x| (x % 3).zero? })
32 'Fizz'
33 when *((1..14).select { |x| (x % 5).zero? })
34 'Buzz'
35 else
36 num.to_s
37 end
38end
39
40def fizz_buzz_3(num)
41 case [num % 3, num % 5].map(&:zero?)
42 when [true, true]
43 'FizzBuzz'
44 when [true, false]
45 'Fizz'
46 when [false, true]
47 'Buzz'
48 else
49 num
50 end
51end
52
53(1..16).each do |n|
54 puts "#{fizz_buzz(n)},\t" \
55 "#{fizz_buzz_1(n)},\t#{fizz_buzz_2(n)},\t#{fizz_buzz_3(n)}"
56end
57
実行例
参考情報
fizzbuzz のいろいろな例を見つけることができます。
- Different solutions for Fizz Buzz in Ruby
https://gist.github.com/Kerrick/2483510
http://kamelog.hatenablog.com/entry/2014/04/26/230139
- RubyでFizzBuzz問題を解いて上司に対抗しよう!
http://melborne.github.io/2011/10/09/Ruby-FizzBuzz/
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。