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

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

ただいまの
回答率

90.61%

  • Ruby

    7318questions

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

FizzBuzz問題について

受付中

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 865

pinokio

score 24

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

(1..100).each do |i|
  print "FizzBuzz" if i % 15 == 0
  print "Fizz" if i % 3 == 0
  print "Buzz" i % 5 == 0
  print i
end
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/04 22: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(",")
    ```

    このコードよりも可読性が上がったり、コードを短くする方法をご存知でしょうか?
    教えていただけましたら幸いです。

    キャンセル

  • 2015/08/05 12: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(","))

    キャンセル

+1

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

(1..100).each do |i|
    if i % 15 == 0
        print "FizzBuzz"
    elsif i % 3 == 0
        print "Fizz"
    elsif i % 5 == 0
        print "Buzz"
    else
        print i
    end
    print ","
end
print "\b"

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Ruby FizzBuzzプログラム

    今までPHPでプログラムを書いていた者で、Rubyは初心者です。 まだ始めたばかりなのに、RubyでFizzBuzzを作ろうと思っています。 しかし、forなどを使って書いていると

  • 解決済

    Ruby FizzBuzzのプログラムを書き換えたい

    以前のFizzBuzzのプログラムは ifとelsifで条件分岐してコードを書いていたのですが、 他の書き方とかありましたら教えてください。 宜しくお願いします。

  • 解決済

    FizzBuzz問題 javascript

    fizzbuzz問題(3の倍数の時"Fizz"を、5の倍数の時"Buzz"を、15の倍数の時"Fizz_Buzz"を出す)を解こうと思っているのですが、 ------------

  • 解決済

    for文に関する質問

    皆様、お疲れ様です。質問させていただきます。 内容 FizzBuzz問題をfor文で記述したものを学習したいと考えています。 何卒よろしくお願い申し上げます。 for i in 

  • 受付中

    for文の関して

    皆様、お疲れ様です。質問させていただきます。  内容  FizzBuzz問題をfor文で記述したものを学習したいと考えています。  何卒よろしくお願い申し上げます。  ①のコード

  • 解決済

    ruby 文法(条件判定をメソッドにする方法)に関して教えて下さい。。

    1~50の数字で3で割り切れる時FIZZ,5で割り切れる時BUZZ,3と5で割り切れる時にはFIZZBUZZと出力されるように。 条件) FIZZ, BUZZ, FIZZBUZZ

  • 受付中

    fizz buzz問題について

    前提・実現したいこと fizz buzzについて質問です。 引数xの値が、 3の倍数ならば文字列"fizz"を画面に書き出し、 5の倍数ならば文字列"buzz"を画面に書き

  • 受付中

    limitについて Fizz Buzz問題

    1から指定した数 (limit) までを出力するプログラムを書きなさい。 ただし,3の倍数のときは数の代わりに「Fizz」,5の倍数のときは「Buzz」と出力し, 3と5両方の倍

同じタグがついた質問を見る

  • Ruby

    7318questions

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