0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rubyの問題を解いて知識を深める。④

Posted at

はじめに

毎日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)

終わりに

まだまだ問題演習は続く。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?