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

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

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

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

Q&A

4回答

2469閲覧

FizzBuzz問題について

pinokio

総合スコア32

Ruby

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

0グッド

0クリップ

投稿2015/08/04 13:22

FizzBuzz問題を解いています。
3の倍数の時にFizz
5の倍数の時にBuzz
15の倍数の時にFizzBuzzと出力するものです。
今回は、数字をカンマ区切りで表示したいのですが、
最後に出力した数字の後ろにはカンマを表示したくありません。
どのように記述したら可読性を損ねずにカンマ区切りで数字を出力できますか?

lang

1(1..100).each do |i| 2 print "FizzBuzz" if i % 15 == 0 3 print "Fizz" if i % 3 == 0 4 print "Buzz" i % 5 == 0 5 print i 6end

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

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

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

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

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

guest

回答4

0

まず、ご質問の本題から外れますが、
質問文のサンプルコードは、
"Buzz"の後ろにifが抜けています。

それから、文字が表示されるときは数字が表示されないのが
一般的なFizzBuzz問題の仕様ですが、分かりやすくするため
なるべくサンプルに近づけて修正すると以下のようになります。

Ruby

1(1..100).each do |i| 2 print "FizzBuzz," if i % 15 == 0 3 print "Fizz," if i % 3 == 0 4 print "Buzz," if i % 5 == 0 5 print i 6 print "," if (i % 100 != 0) 7end

「print i」の後に一行足すのと少々で、
カンマ区切りについては実現できます。

投稿2015/08/04 13:52

編集2015/08/04 13:54
LLman

総合スコア5592

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

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

0

結果を逐一出力せずarrayに入れて
ループを抜けた後、Join(",")したものを出力するのはどうでしょう?

投稿2015/08/04 13:27

ozwk

総合スコア13521

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

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

pinokio

2015/08/04 13:52

ご回答ありがとうございます。 以下のようにコードを書いてみたのですが、正しく出力されました! ```lang-ruby nums = [] (1..100).each do |i| i = "FizzBuzz" if i % 15 == 0 i = "Fizz" if i % 3 == 0 i = "Buzz" if i % 5 == 0 nums << i end print nums.join(",") ``` このコードよりも可読性が上がったり、コードを短くする方法をご存知でしょうか? 教えていただけましたら幸いです。
otn

2015/08/05 03:50

FizzBuzzはいろいろありますが、この流れの延長線では、こうでしょうか。 倍数の時には、i を出さない本来のFizzBuzzという前提で。 puts((1..100).map do |i| case 0 when i % 15 then "FizzBuzz" when i % 3 then "Fizz" when i % 5 then "Buzz" else i end end.join(","))
guest

0

',' の出力を if 文で判定させることを追加すれば良いと思います。

ruby

1num = 100 2(1..num).each do |i| 3 print "FizzBuzz" if i % 15 == 0 4 print "Fizz" if i % 3 == 0 5 print "Buzz" if i % 5 == 0 6 print i 7 print ',' if i != num 8end

投稿2015/08/15 01:29

katoy

総合スコア22324

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

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

0

邪道ですが、最後にバックスペースを出力して末尾のカンマを消すとか・・・

ruby

1(1..100).each do |i| 2 if i % 15 == 0 3 print "FizzBuzz" 4 elsif i % 3 == 0 5 print "Fizz" 6 elsif i % 5 == 0 7 print "Buzz" 8 else 9 print i 10 end 11 print "," 12end 13print "\b"

投稿2015/08/04 14:28

hy3

総合スコア594

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問