
こんにちは、サブローです。
Rubyの練習問題とそのサンプルプログラムをみて、Rubyを勉強したい、という方へ。
今回は、Rubyの練習問題を解いて、そのサンプルプログラムとともにその解説をしていきます。
この記事を書いている僕は、情報系の大学を修了し、プログラミングにおいてはある程度学びましたが、Rubyに関しては、趣味程度でしか触っていないので、
を使いながら、プログラムを書いていきます。
FizzBuzz
プログラミングの練習問題としては、もっとも有名なものですね。
ルールは、至ってシンプル。
1から順に数を表示していき、3で割り切れるのであれば”Fizz”、5で割り切れるのであれば”Buzz”、3でも5でも割り切れるのあれば”FizzBuzz”と表示させます。
今回は、100までを表示させてみましょう。
では、コードを書いていきます。
for i in 1..100 if i % 15 == 0 print "FizzBuzz\s" elsif i % 5 == 0 print "Buzz\s" elsif i % 3 == 0 print "Fizz\s" else print i , "\s" end end
実行結果です。
プログラムの解説ですが、forで1から100まで繰り返して、15、5、3のそれぞれのあまりが0になるかどうかで、条件判断をしています。
ちなみに、「\s」は、1文字分の空白を意味します。
うるう年かどうかを判定するプログラム
西暦を入力すると、うるう年かどうかを表示するプログラムを書いてみましょう。
うるう年の定義は、
- 4で割り切れる年はうるう年
- ただし、100で割り切れる年は平年
- ただし、400で割り切れる年はうるう年
となります。
では、書いてみます。
year = ARGV[0].to_i if year % 100 == 0 && year % 400 != 0 print year , "年は、うるう年ではありません。\n" elsif year % 4 == 0 print year , "年は、うるう年です。\n" else print year , "年は、うるう年ではありません。\n" end
実行結果です。
解説です。
まずは、ARGVで受け取った文字列を数値に変換し、最初の条件判断で、100で割り切れて400で割り切れない年を判断し、それ以外を4で割り切れるかどうかで、うるう年を求めています。
ARGVで受け取る入力は「文字列」であるということと、二項演算子「&&」の使い方に注意が必要です。
数を当てるゲーム
プログラムの中でランダムに生成される1から100までの自然数を、入力した数より大きか小さいかの判定を繰り返し行うことで当てる、というゲームです。
では、書いてみます。
n = rand(1..100) m = 0 loop do puts "入力をお願いします。" m = gets.to_i if m > n puts "もっと小さいです。" elsif m < n puts "もっと大きいです。" else break end end puts "正解です。"
実行結果です。
randメソッドで乱数を生成して、無限ループの中で、getsメソッドで入力を求め、m=nとなったらbreakして、「正解です。」と表示して、プログラムが終了します。
getsメソッドもARGVと同様に文字列を数値に変換する必要があります。
まとめ
今回は、プログラミングの練習問題を解いて、そのサンプルプログラムを書き、解説をしてみました。
プログラミングは、知識だけではなく、実際に書いてみないと上達しないので、どんどん手を動かすようにしましょう。
それではまた。