INDEX
■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。
基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
(5/23時点の方針)
メソッドの切り分け方や値の受け渡しを練習するために、コード長の短さについては気にせずに書くことにする。
■問題
●出典
AtCoder Beginner Contest 034のAB問題
https://atcoder.jp/contests/abc034/tasks/abc034_a
●問題文
高橋君が二回テストを受けました。一回目の得点は x 点、二回目の得点は y 点でした。また、一回目と二回目の得点は異なるものでした。
高橋君の得点は改善しましたか。高橋君の二回目の得点が一回目の得点より高くなっている場合は "Better"、低くなっている場合は "Worse" と出力してください。
●入力
入力は以下の形式で標準入力から与えられる。
x y
- 入力はすべて整数である。
- 0≤x,y≤100 をみたす。
- x と y は異なる。
部分点
この問題には部分点が設定されている。満点は 100 点である。
x < y を満たすデータセットに正解した場合は、50 点が与えられる。
●出力
高橋君の二回目の得点が一回目の得点より高くなっている場合は "Better"、低くなっている場合は "Worse" と出力せよ。 出力の末尾には改行を入れること。
■回答
●愚直に書く
2つの入力をそれぞれ変数でとって、条件分岐する感じかな。
x, y = gets.split.map(&:to_i)
if x < y
puts 'Better'
else
puts 'Worse'
end
通った!
三項演算子にしよう。
x, y = gets.split.map(&:to_i)
puts x < y ? 'Better' : 'Worse'
通った!
●メソッド化して書く
メソッドを作る練習のために、あえてそういう書き方をする。
def main
x, y = read_numbers
puts judge(x, y)
end
def judge(x, y)
puts x < y ? 'Better' : 'Worse'
end
def read_numbers
gets.split.map(&:to_i)
end
main
通った!!
●他の方の回答例
最上位の方々はevalを使っていたけど考え方としては同様だった。
●出てきたメソッド等
公式リファレンスを見る訓練。
- 今回は特に無し
■振り返りなど
1週間あけると感覚の鈍りを感じる。できれば週2くらいちょこちょこやりたいな。