yuuki blog

プログラミング をアプトプットしています。

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

先に絶対値を求めて、その後検討する記述です