Ruby if else No.3
問題
メソッドに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
自分の回答
def close_far(a,b,c) if (1 == (a - b).abs || 1 == (a - c).abs) && 2 <= (b - c).abs
#abcそれぞれの差分を算出し、絶対値に変換し、aとbの差が1oraとcの差が1かつbとcとの数値の差が2以上を検討しています。
#or文を()で括らないとaとbの差が1もしくは、aとcの差が1かつbとcとの数値の差が2以上となるので注意
puts "True" else puts "False" end end
模範回答
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
先に絶対値を求めて、その後検討する記述です