■はじめに
Rubyの基礎的な問題をたくさん解くことで基本的な考え方やメソッドの使い方を定着させたい。 基本的にはAtCoderというプログラミングコンテスト(競技プログラミング)の過去問を使う。(AtCoderは難易度が分かれており、難易度の低いA問題かB問題を解いていく)
■問題
●出典
AtCoder Beginner Contest 026のA問題 https://atcoder.jp/contests/abc026/tasks/abc026_a
●問題文
正の偶数 A が与えられる。 x+y=A となる正の整数 x, y のうち、 x×y が最大となるものを選び、その値を出力しなさい。
●入力
入力は以下の形式で標準入力から与えられる。
A
- 1 行目には、正の偶数 A(2≦A≦100) が与えられる。
●出力
x×y の最大値を出力しなさい。 出力の末尾には改行を入れること。
■回答
●愚直に書く
ちょっとややこしそうな問題!?と思ったら、偶数であることが指定されているので、単純に入力値を半分にしたものを2回かければ良さそうか。
a = gets.to_i
puts (a/2)*(a/2)
通った!
●リファクタリング/別アプローチ
2乗は**2
でできるらしい。
あとは、コードもシンプルなので変数に入れるのも省いて、
puts (gets.to_i/2)**2
通った!!
●他の方の回答例
上位の回答は下記のような感じ。
puts gets.to_i**2/4
まず2乗してから2の2乗である4で割っても同じ回答になるのか、なるほど〜。少しでもコード長を短くするならこれもアリか。
●出てきたメソッド等
公式リファレンスを見る訓練。
- 特に無し
■振り返りなど
他の回答が数学的に面白かった。ぶっちゃけわかりにくいのではと思わなくもないけど、こういう考え方をできることは役に立ちそう。