問題
メソッドに3つの整数a b cを与えます。
・「aとbの差が1」または「aとcの差が1」であり、かつ「bとcとの数値の差が2以上」の場合はTrue
・それ以外はFalse
と出力するメソッドを作りましょう。
出力例:
close_far(1, 2, 10) → True
close_far(1, 2, 3) → False
close_far(4, 1, 3) → True
ヒント
返り値を絶対値(この場合は正の整数)に変換する際はabsメソッドを使いましょう。
私の回答
def number_far(a,b,c)
x = (a-b).abs
y = (a-c).abs
z = (b-c).abs
if x == 1 && z >= 2
puts "True"
elsif y == 1 && z >= 2
puts "True"
else
puts "False"
end
end
解説
まずa,b,cの整数の差をabsメソッドを使用しx,y,zに代入。
その後「aとbの差が1」または「aとcの差が1」であり、かつ「bとcとの数値の差が2以上」の場合のif文を作り、
それ以外は"False"の出力する。
模範回答
def close_far(a,b,c)
x = (a-b).abs
y = (a-c).abs
z = (b-c).abs
if x == 1 && z >= 2
puts "True"
elsif y == 1 && z >= 2
puts "True"
else
puts "False"
end
end
模範解説
まず、2~4行目の記述で、abcそれぞれの差分を算出し、絶対値に変換します。
そして6行目のx == 1 && z >= 2で、「aとbの差が1」であり、かつ「bとcとの数値の差が2以上」を検討しています。
同様に8行目のy == 1 && z >= 2で、「aとcの差が1」であり、かつ「bとcとの数値の差が2以上」を検討しています。
条件式は、以下のようにまとめて記述することもできます。
if (x == 1 && z >= 2) || (y == 1 && z >= 2)
puts "True"
else
puts "False"
end
感じたこと
数値の差を求めるabsメソッドを学習できたことは嬉しい。
日々いろいろなメソッドに触れていく中で、メソッド数の多さに驚いている。
毎日1つでもメソッドを覚えられるよう精進していきたい。
もしアドバイスやご指摘等ございましたらぜひお願いします!!
以上