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

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
[code]
x, y = gets.split.map { | v | v.to_i }

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

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

パターン2

[code]
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
[/code]

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

以上。

カテゴリー: Ruby