INDEX
■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。
基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
(5/23時点の方針)
メソッドの切り分け方や値の受け渡しを練習するために、コード長の短さについては気にせずに書くことにする。
■問題
●出典
AtCoder Beginner Contest 036のA問題
https://atcoder.jp/contests/abc036/tasks/abc036_a
●問題文
高橋君はお茶のペットボトルが A 本入った箱を買うことにしました。 高橋君は少なくとも B 本のお茶のペットボトルがほしいです。 箱を何箱買えばよいですか。
●制約
- 1≤A,B≤1000
●部分点
- 50 点分のテストケースでは、B は A の倍数である。
●入力
入力は以下の形式で標準入力から与えられる。
A B
●出力
高橋君が買わなければならない箱の個数の最小値を出力せよ。
■回答
●愚直に書く
BをAで割って繰り上げれば良さそうか?
繰り上げのメソッドはceil
で、小数点を繰り上げするからto_i
でなくto_f
で取っておいたほうが良いか。
a, b = gets.split.map(&:to_f)
puts (b / a).ceil
通った!
●メソッド化して書く
メソッドを作る練習のために、あえてそういう書き方をする。
今回はメインメソッドと標準入力を取得するメソッドの2つだけにした。
def main
a, b = read_number
puts (b / a).ceil
end
def read_number
gets.split.map(&:to_f)
end
main
通った!
●リファクタリング/別アプローチ
別の方法あるかな。
余りがあるか無いかで条件分岐するとかは余計ややこしくなるのでイマイチな気がする。
●他の方の回答例
上位勢の書き方が(b+a-1)/a
が多い。
はじめto_i
で整数で取ってきて、上の計算をすると余りが切り捨てられて意図した結果になるんだな。なるほど…!
●出てきたメソッド等
公式リファレンスを見る訓練。
■振り返りなど
上位勢の回答はいかにも数学な感じ(?)でサラッとかけたらカッコ良さそうだけど、パッと見でわかりやすいかと言われるとどうなんだろう…。