はじめに
毎日Rubyの問題を復習として5問ずつ解いています。
知識を更に深堀りするためにアウトプットします。
Q16 検索問題
任意の文字列に"code"が、左から何文字目に出てくるかを返し、その数を出力するメソッドを作る。
出力例
count_code("codexxcode") → 1
count_code("aaacodebbb") → 4
count_code("cozexxcode") → 7
解答
def count_code(str)
puts str.index("code", 0) + 1
end
ポイントとしてはindexメソッドになります。文字列や配列の中に指定した文字列が含まれていた場合、その文字列の開始位置を整数の値で返します。
str.index(検索したい文字列, [検索を開始する位置])
解答に+ 1を使用している理由は先頭を0から数えた数字を返すため使用。
Q17 if,else問題
以下の要件を満たすparrot_troubleメソッドを実装。
最近、あなたはオウムを飼いはじめました。しかし、近隣から「夜にオウムの鳴き声がうるさい」と苦情がくるようになりました。あなたはこれをシステムで解決しようと考え、次のようなプログラムの要件を考えました。
- 第一引数にオウムが鳴く場合はtrueを指定し、鳴かないfalseを指定する
- 第二引数には時間を指定する(ただし、「分」は考えないものとする)
- 20時から翌朝7時までの間にオウムが鳴いた場合は「NG」と出力する(20時と7時は含まれない)
- 上記以外の場合は「OK」と出力する
雛形
def parrot_trouble(talking, hour)
# ここに条件式を実装する
end
# 呼び出し例
parrot_trouble(true, 6)
出力例
parrot_trouble(true, 6) → NG
parrot_trouble(true, 7) → OK
parrot_trouble(false, 6) → OK
parrot_trouble(false, 7) → OK
解答
def parrot_trouble(talking, hour)
if talking && (hour < 7 || hour > 20)
puts "NG"
else
puts "OK"
end
end
# 呼び出し例
parrot_trouble(true, 6)
Q18 偶数値の取得
配列にある値の中から偶数の数をカウントして出力するメソッドを作る
出力例
count_evens([2, 1, 2, 3, 4]) → 3
count_evens([2, 2, 0]) → 3
count_evens([1, 3, 5]) → 0
def count_evens(nums)
count = 0
nums.each do |num|
if num.even? #数が偶数かどうか判断
count += 1
end
end
puts count
end
ポイントはevenメソッド
Rubyがもともと用意している対象の値が偶数かどうかを判断するメソッド
10.even?
#=> true
5.even?
#=> false
Q19 特定の数字を検知するプログラムの実装
以下の要件を満たすarray123メソッドを実装
- 配列内に1,2,3が全て入っている場合は、「True」と出力すること
- 配列内に1,2,3の全てが入っていない場合は、「False」と出力すること
出力例
array123([1, 1, 2, 3, 1]) → True
array123([1, 2, 4, ]) → False
array123([1, 1, 2, 1, 4, 3]) → True
解答
def array123(nums)
if nums.include?(1) && nums.include?(2) && nums.include?(3)
puts "True"
else
puts "False"
end
end
# 呼び出し例
array123([1, 1, 2, 3, 1])
ポイントはinclude?メソッド
include?メソッドは指定した値が、配列中に含まれているかを判定するメソッド。
array = ["foo", "bar"]
puts array.include?("bar")
#=> true
puts array.include?("hoge")
#=> false
Q20 if,else問題
指定された2つの真偽値によって処理が異なるプログラムを実装。
Aさんは普段土日が休みの仕事に就いており、休みの日は遅くまで寝ていたいと考えています。
そこで、Aさんのために「その日が遅くまで寝ていられるかどうか」を判断する、sleep_inメソッドを実装しましょう。
第一引数の値では「平日かどうか」、第二引数の値では「休暇かどうか」をtrueまたはfalseを用いて以下のように表します。
- 第一引数がtrue(平日である)または、第二引数がtrue(休暇である)の場合はtrueと出力する
- 第一引数がfalse(平日でない)または、第二引数がtrue(休暇である)の場合はtrueと出力する
- 第一引数がtrue(平日である)または、第二引数がfalse(休暇でない)の場合はfalseと出力する
- 第一引数がfalse(平日でない)または、第二引数がfalse(休暇でない)の場合はtrueと出力する
出力例
sleep_in(false, false) → true
sleep_in(true, false) → false
sleep_in(false, true) → true
解答
def sleep_in(is_weekday, is_vacation)
if (is_weekday != true) || (is_vacation == true)
puts true
else
puts false
end
end
# 呼び出し例
sleep_in(false, false)
終わりに
まだまだ問題演習は続く。