コロナで無職になった私がエンジニアになるまで

コロナの影響で前職をクビになってから、エンジニアを目指してます。

Rubyの練習問題 ~100, 10, 1の位の合計値との差~

問題.1

3桁の正の整数を入力します。その整数の「百の位・十の位・一の位の和」について、
10の倍数(10,20,30...)からの差が
・2以内であるときは"True"
・それ以外は"10の倍数との差は○です"
と表示されるようにしましょう。

 

[自分の解答]

def near_ten(num)
  place_3 = (num/100) % 10
  place_2 = (num/10) % 10
  place_1 = (num/1) % 10

  sum = place_3 + place_2 + place_1
  if (sum % 10) <= 2 || (sum % 10) >= 8
    puts "True"
  else
    puts "10の倍数との差は#{10 - (sum % 10)}です"
  end
end

前回解いた記述とほとんど同じになった。
正答との差が結構あるので、正答をしっかり読み解いていく。

 

[正答]

def near_ten(num)
  total = (num/100 % 10) + (num/10 % 10) + (num % 10)
  remainder = total % 10
  if remainder <= 2 || remainder >= 8
    puts "True"
  elsif remainder <= 5
    puts "10の倍数との差は#{remainder}です"
  else 
    puts "10の倍数との差は#{10 - remainder}です"
  end
end

totalでそれぞれの桁の合計値。
remainderにtotalを10で割った時の余りを代入。
このreminderの値によって条件を分岐させる。
しかし、正直言ってelsifの記述の必要性は感じない。
10からreminderを引いた値が10の倍数との差になるため。