読者です 読者をやめる 読者になる 読者になる

ちくわ

ちくわにきゅうりを入れるとうまい

AtCoder ABC #034 の B「ペア」をやってみた

Ruby

abc034.contest.atcoder.jp

こちらの問題です。

問題内容はこちら

109 人の人がいます。人には 1 から 109 までの番号がついています。
1 番と 2 番の人、3 番と 4 番の人、5 番と 6 番の人、… がペアになりました。
n 番の人とペアになった人の番号を求めてください。

fmfm...

入力例はこんなです。

入力例1
100
出力例1
99

入力例2
123456789
出力例2
123456790

fmfm...

入力例をみると、偶数だったら -1 して、奇数なら +1 で良いのではとシンプルに思いました。他に例外が無いかを考えても特に思いつきません。

とりあえず書いてみました。

class Pair
  def initialize
    @num = STDIN.gets.to_i
    raise 'Opps' unless @num.between?(1,1_000_000_000)
  end
 
  def result
    if @num.even?
      @num - 1
    else
      @num + 1
    end
  end
end
 
pair = Pair.new
puts pair.result

今回はなるべく ruby っぽい書き方を意識してみました。
エイヤッとダメ元で実行して見ると...

Accepted

あれ、通ってしまった。これでいいの?まじで?
if 分周りに素朴感があったので、三項演算子にした結果はこちら

class Pair
  def initialize
    @num = STDIN.gets.to_i
    raise 'Opps' unless @num.between?(1,1_000_000_000)
  end
 
  def result
    @num.even? ? @num - 1 : @num + 1
  end
end
 
pair = Pair.new
puts pair.result

こちらも通ったのですが、

Exec time 57ms -> 51ms
Memory usage 4872KB -> 5044KB

と、(三項演算子のほうが)若干パフォーマンスが悪いという結果に。へー。

今回は PR はこちら。

課題 034 を追加 by ginbear · Pull Request #2 · ginbear/atcoder · GitHub

おしまい。