質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

560閲覧

[Ruby]case文を使ったFizzBuzz問題

kalon

総合スコア198

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

1グッド

3クリップ

投稿2018/12/04 12:16

いつもお世話になっております。

ちょっとした思いつきでFizzBuzz問題をcase文で解けないかと書いてみました。

ruby

1def fizz_buzz(n) 2 case 3 when (n % 15).zero? 4 'FizzBuzz' 5 when (n % 3).zero? 6 'Fizz' 7 when (n % 5).zero? 8 'Buzz' 9 else 10 n 11 end 12end 13 14 15(1..15).each do |n| 16 puts fizz_buzz(n) 17end

正常に動作すするのですが、Rubocopにcase文の対象オブジェクト名なしで書いてはいけない、と注意されます。

正しいcase文を使ったFizzBuzzの書き方を教えてください。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

すこし工夫をしてみた方法を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

  • Rubyのcaseを使ってFizzBuzzを書く

http://kamelog.hatenablog.com/entry/2014/04/26/230139

  • RubyでFizzBuzz問題を解いて上司に対抗しよう!

http://melborne.github.io/2011/10/09/Ruby-FizzBuzz/

投稿2018/12/05 13:11

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

caseの後の式は省略可能なので、それで正しいです。
何か書きたければ、この場合は、trueでも書いておけばいいかと。

あるいは、少しわかりにくくなりますが、

Ruby

1case 0 2when n % 15 3when n % 3 4when n % 5 5else 6end

とか。

投稿2018/12/04 12:24

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kalon

2018/12/04 12:26

otn様、いつも回答してくださってありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問