テストを解いた

投稿日: カテゴリー Rubyタグ

こんにちは、いなむーです。

AtCoderシリーズです。
今日も問題「テスト(abc034a)」を解いてみました。

問題はこちら。

問題文
高橋君が二回テストを受けました。一回目の得点は x 点、二回目の得点は y 点でした。また、一回目と二回目の得点は異なるものでした。

高橋君の得点は改善しましたか。高橋君の二回目の得点が一回目の得点より高くなっている場合は “Better”、低くなっている場合は “Worse” と出力してください。
入力
入力は以下の形式で標準入力から与えられる。

x y
入力はすべて整数である。
0≤x,y≤100 をみたす。
x と y は異なる。
部分点
この問題には部分点が設定されている。満点は 100 点である。
x < y を満たすデータセットに正解した場合は、50 点が与えられる。

出力
高橋君の二回目の得点が一回目の得点より高くなっている場合は “Better”、低くなっている場合は “Worse” と出力せよ。 出力の末尾には改行を入れること。

入力例1
12 34

出力例1
Better

今回はがんばって2パターンで書いて見ました。

パターン1

x, y = gets.split.map { | v | v.to_i }

if x.between?(1,100) && y.between?(1,100)
  puts x < y ? "Better" : "Worse"
end

いままで解いてきたのと同じですね〜。1から100までの範囲をbetweenで指定したシンプルなパターンです。
そして、このままだと同じなので、勉強のためにClassを使ってみることにしました。
Classを使って、オブジェクト指向ちっくに書けるようになることで、少しづつ理解が深まるかな?という考えに至りました。
そして書いたコードがこちら。

パターン2

class ABC034a
  def input
    @x, @y = gets.split.map { | v | v.to_i }
  end
  def solve
    self.input
    if @x.between?(1,100) && @y.between?(1,100)
      puts @x < @y ? "Better" : "Worse"
    end
  end
end
 
x = ABC034a.new
x.solve

正直メソッドでやっていることは全く同じです。
しかし、個人的にはclassを使って書けたことが一つ成長かなという感じです。
やはりオブジェクト指向で書いていけるようにならないと、ツールとかを作るのもしんどいというか、シェルスクリプトと同じになってしまうので頑張ってこのパターンでも書いていこうと思います。

以上。