問題
回答
a,b = gets.split.map(&:to_i) def fun(a,b) return "IMPOSSIBLE" if (a + b) % 2 == 1 (a + b) / 2 end puts fun(a,b)
流れ説明
1、値を受付
a,b = gets.split.map(&:to_i)
2、算出メソッドを作成
def fun(a,b) return "IMPOSSIBLE" if (a + b) % 2 == 1 (a + b) / 2 end
if (a + b) % 2 == 1
の場合は以下のような関係性ではないということなのでIMPOSSIBLEと表示してメソッドを抜ける。
|A−K|=|B−K|
(a + b) / 2
で整数 Kを算出。
3、答え表示
puts fun(a,b)
putで整数 Kを出力。
工夫ポイント
- 算出ロジックをrubyのメソッドに切り分けた。
学びポイント
- コードの配置場所について
最初以下のようにコード書いていた。
require 'pry' a,b = gets.split.map(&:to_i) puts fun(a,b) def fun(a,b) return "IMPOSSIBLE" if (a + b) % 2 == 1 (a + b) / 2 end
すると以下のようなエラーになった。
sample.rb:4:in `<main>': undefined method `fun' for main:Object (NoMethodError)
fun(a,b)を呼び出した時点では。fun(a,b)はまだ実装できてないのでNoMethodErrorになる。
なのでputs fun(a,b)
fun(a,b)の下に移動してあげると問題なく動く
require 'pry' a,b = gets.split.map(&:to_i) def fun(a,b) return "IMPOSSIBLE" if (a + b) % 2 == 1 (a + b) / 2 end puts fun(a,b)
感想
- コード能力以前に数学の絶対数の求め方の方法を忘れていたので、ギブアップ。
アルゴリズム考えるには最低限の数学能力が必要だなと痛感