Java、RubyにおけるFizzBazz問題とは
FizzBuzz問題とは、プログラミングにおける有名な問題である。
非常に初歩的なのだが、案外、きちんと解答できる人が少ない事でも有名。
熟練のエンジニア、プログラマーでもだ。
既存コードを元に実装したり、設計工程が多くなる事によって、何も見ずに実装する事ができなくなってしまっているのだ。
初心者の方、また上級者の方でも、ぜひトライしてみてほしい。
ではJava、RubyにおけるFizzBazz問題について考えよう。
問題
1から100までの数を出力するプログラムを書け。
ただし3の倍数のときは「Fizz」と、
5の倍数のときは「Buzz」と出力し、
3と5両方の倍数の場合には「FizzBuzz」と出力すること。
Javaでの実装
while文でも実装可能だが、一般的なfor文での実装。
public class FizzBazz{
public static void main(String[] args){
String space = "";
for(int i = 1; i <= 100; i++){
if(i % (3 * 5) == 0){
System.out.println("FizzBazz");
}else if(i % 3 == 0){
System.out.println("Fizz");
}else if(i % 5 == 0){
System.out.println("Bazz");
}else{
System.out.println(i);
}
System.out.println(space);
}
}
}
Rubyでの実装
Rubyでは様々なメソッドが用意されているため、数種類の実装方法がある。全ては紹介できないが、for、each、uptoメソッドでの実装。
for文を使用した実装
def fizz_bazz
for i in 1..100
if i % (3 * 5) == 0
puts "FizzBazz"
elsif i % 3 == 0
puts "Fizz"
elsif i % 5 == 0
puts "Bazz"
else
puts i
end
end
eachメソッドを使用した実装
def fizz_bazz
(1..100).each do |i|
if i % (3 * 5) == 0
puts "FizzBazz"
elsif i % 3 == 0
puts "Fizz"
elsif i % 5 == 0
puts "Bazz"
else
puts i
end
end
end
uptoメソッドを使用した実装
def fizz_bazz
1.upto(100) do |i|
if i % (3 * 5) == 0
puts "FizzBazz"
elsif i % 3 == 0
puts "Fizz"
elsif i % 5 == 0
puts "Bazz"
else
puts i
end
end
end
こうしてJavaとRubyを比べてみると、静的型付けであるJavaの方がコード量が多いのが分かる。
厳密に型まで指定する必要があるJavaの安心感。汎用的で、大規模開発で活躍する要因の一つだ。
反対にRubyは動的型付けであり、型の指定が不要。
「全てがオブジェクト」である事から、String型やInteger型もオブジェクトであり、様々なメソッドを持っている。そのためメソッドを呼ぶだけで勝手に動いてくれる感覚だ。
開発スピードが圧倒的に早い。ベンチャーやスタートアップ企業でよく用いられるのも納得だ。
応用編 世界のナベアツ問題
FizzBazz問題を基本形とし、様々な応用へと発展させる事も可能。
問題
1から100までの数を出力するプログラムを書け。
ただし3の倍数または3を含む数のときは「Fizz」と、
5の倍数または5を含む数字のときは「Buzz」と出力し、
3と5両方の倍数の場合には「FizzBuzz」と出力すること。
Javaでの実装
public class FizzBazz{
public static void main(String[] args){
String space = "";
for(int i = 1; i <= 100; i++){
if(i % (3 * 5) == 0){
System.out.println("FizzBazz");
}else if(i % 3 == 0 || Integer.toString(i).contains("3")){
System.out.println("Fizz");
}else if(i % 5 == 0 || Integer.toString(i).contains("5")){
System.out.println("Bazz");
}else{
System.out.println(i)
}
System.out.println(space);
}
}
}
Rubyでの実装
def fizz_bazz
for i in 1..100
if i % (3 * 5) == 0
puts "FizzBazz"
elsif i % 3 == 0 || i.to_s.include?("3")
puts "Fizz"
elsif i % 5 == 0 || i.to_s.include?("5")
puts "Bazz"
else
puts i
end
end
何も見ずに誤字脱字無く実装できるか
実際に手を動かしてみると、クラス宣言、for文の書き方等に手が止まる方も多かったのではないだろうか。
基本に立ち戻り、こういった問題を解いてみるのも面白い。
コメント ( 0 )
トラックバックは利用できません。
この記事へのコメントはありません。