■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。 基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
(5/23時点の方針) メソッドの切り分け方や値の受け渡しを練習するために、コード長の短さについては気にせずに書くことにする。
■問題
●出典
AtCoder Beginner Contest 045のA問題 https://atcoder.jp/contests/abc045/tasks/abc045_a
●問題文
上底の長さが a、下底の長さが b、高さが h の台形があります。 この台形の面積を求めてください。
●制約
- 1≤a≤100
- 1≤b≤100
- 1≤h≤100
- 入力で与えられる値はすべて整数
- h は偶数
●入力
入力は以下の形式で標準入力から与えられる。
a
b
h
●出力
台形の面積を整数で出力せよ。面積が整数になることは保障されている。
■回答
●愚直に書く
標準入力をとって、公式どおりに書けば良いかな?
a, b, h = readlines.map(&:to_i)
puts (a + b) * h / 2
通った!
●メソッド化して書く
メソッドを作る練習のために、あえてそういう書き方をする。今日は久しぶりに書く! メインメソッド、台形の面積を出すメソッド、標準入力を取ってくるメソッドの3つを作成。
def main
a, b, h = read_nums
puts trapezoid(a, b, h)
end
def trapezoid(a, b, h)
(a + b) * h / 2
end
def read_nums
readlines.map(&:to_i)
end
main
通った!
●リファクタリング/別アプローチ
これ以上シンプルにする方法は思いつかないので省略。
●他の方の回答例
計算方法はみなさん同じような感じだった。 標準入力の取り方で色々と違いがある感じ。
●出てきたメソッド等
公式リファレンスを見る訓練。 今回は無し。
■振り返りなど
メソッド化して書く練習、ついサボりがちなので今日は出来て良かった。