■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。 基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
(5/23時点の方針) メソッドの切り分け方や値の受け渡しを練習するために、コード長の短さについては気にせずに書くことにする。
■問題
●出典
AtCoder Beginner Contest 052のA問題 https://atcoder.jp/contests/abc052/tasks/abc052_a
●問題文
二つの長方形があります。 一つ目の長方形は、縦の辺の長さが A、横の辺の長さが B です。 二つ目の長方形は、縦の辺の長さが C、横の辺の長さが D です。
この二つの長方形のうち、面積の大きい方の面積を出力してください。 なお、二つの長方形の面積が等しい時は、その面積を出力してください。
●制約
- 入力は全て整数である
- 1≦A≦10^4
- 1≦B≦10^4
- 1≦C≦10^4
- 1≦D≦10^4
●入力
入力は以下の形式で標準入力から与えられる。
A B C D
●出力
大きい方の長方形の面積を出力せよ。 二つの長方形の面積が等しいなら、その面積を出力せよ。
■回答
●愚直に書く
愚直に書くなら、A*B
がC*D
より大きければ、という条件分岐かな。
a, b, c, d = gets.split.map(&:to_i)
if a * b >= c * d
puts a * b
else
puts c * d
end
通った! 三項演算子にすると、
a, b, c, d = gets.split.map(&:to_i)
puts a * b >= c * d ? a * b : c * d
通った!
●メソッド化して書く
メソッドを作る練習のために、あえてそういう書き方をする。
今回は割愛かな…。
●リファクタリング/別アプローチ
これはmax
を使う問題か。
a, b, c, d = gets.split.map(&:to_i)
puts [a * b, c * d].max
通った!!
●他の方の回答例
最上位の方はeval
を使っておられる。基本的な考え方は皆さんmax
。
●出てきたメソッド等
公式リファレンスを見る訓練。
■振り返りなど
すぐにmax
に気づいたので良かった。