今までPHPでプログラムを書いていた者で、Rubyは初心者です。
まだ始めたばかりなのに、RubyでFizzBuzzを作ろうと思っています。
しかし、forなどを使って書いていると
あまりに冗長なコードになってしまいました。
どなたかいいサンプルを教えていただけませんか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
やり方は幾通りもあると思いますが、私の例も挙げて置きます。
3 項演算子で少し短く書いているのと Fizz, Buzz への変換用の関数を作ってから処理してます。
`
def to_fizz_buzz(num)
str = (num % 3 == 0) ? "Fizz" : ""
str += (num % 5 == 0) ? "Buzz" : ""
(!str.empty?) ? str : num
end
(1..20).each{|n|puts to_fizz_buzz(n)}
`
変換用の関数を用意していると出力形式を変えたいという場合もやりやすいです。
`
puts (1..20).map{|n| to_fizz_buzz(n)}.join(', ')
1, 2, Fizz, 4, Buzz, ...
`
他にも縛りがある場合だと次のような感じです。
一行縛り
lang
1(1..20).each{|n|puts((n % 15 == 0) ? "FizzBuzz" : (n % 3 == 0) ? "Fizz" : (n % 5 == 0) ? "Buzz" : n)}
%
の使用禁止
`
def divable?(num, d)
num -= d while 0 < num
num == 0
end
(1..20).each{|n|
if (divable?(n, 15))
puts "FizzBuzz"
elsif (divable?(n, 3))
puts "Fizz"
elsif (divable?(n, 5))
puts "Buzz"
else
puts n
end
}
`
投稿2014/09/04 15:56
総合スコア863
0
Rubyにはeachというオブジェクトに含まれている要素を順に
取り出すメソッドがありますのでそれを用いれば、
簡潔なコードで書くことができます。
ネットで調べればあがっていると思いますが、
私が書いたコードサンプルを載せておきます。
lang
1(1..100).each do |i| 2if i % 15 == 0 3puts :FizzBuzz 4elsif i % 5 == 0 5puts :Buzz 6elsif i % 3 == 0 7puts :Fizz 8else 9puts i 10end 11end
投稿2014/09/03 02:30
総合スコア233
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
最終鬼畜FizzBuzz大全 から引用。
lang
1fizzbuzz.php 2<?php $n = trim(fgets(fopen('php://stdin', 'r'))); 3for ($i = 1; $i <= $n; $i++) { 4 if ($i % 3 === 0) { ?>Fizz<?php } 5 if ($i % 5 === 0) { ?>Buzz<?php } 6 elseif ($i % 3 !== 0) echo $i; 7?> 8 9<?php 10}
lang
1#!/usr/bin/env ruby 2puts (1..STDIN.read.to_i).map{|i| 3 case 4 when i % 15 == 0; "FizzBuzz" 5 when i % 3 == 0; "Fizz" 6 when i % 5 == 0; "Buzz" 7 else ; i.to_s 8 end 9}.join("\n")
次のページでは、小さなプログラムをいろいろな言語で書く例が集められています。
練習問題
自分が知っている言語と、これから学ぼうとしている言語での書き方を比較してみるとよいと思います。
FizzBuzz も問題として取り上げられています。
投稿2014/09/05 23:38
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/09/08 01:43