技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

競技プログラミング day2

問題

atcoder.jp

回答

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)

感想

  • コード能力以前に数学の絶対数の求め方の方法を忘れていたので、ギブアップ。
    アルゴリズム考えるには最低限の数学能力が必要だなと痛感