4月19日、AtCoder Beginner Contest 163にRubyで参加しました。今回はA問題の復習です。
A - Circle Pond
問題文
半径 R の円の周長を出力してください。
制約
1 ≤ R ≤ 100
入力は全て整数である。入力
入力は以下の形式で標準入力から与えられます。
R出力
円の周長を出力せよ。 なお、想定解答との絶対誤差または相対誤差が 10−2 以下であれば正解として扱われる。
提出したコード
r = gets.to_i puts r * 2 * Math::PI
結果:AC(正解) 実行時間:59 ms
考えたことを言語化してみる
1行目:gets
で取得した標準入力値(円の半径)を、to_i
で文字列から整数に変換(末尾の改行も削除)。
2行目:円周を求める式は「直径×円周率」。つまり「半径×2×円周率」。円周率は3.14...
でもいいのですが、Rubyにはそういう定数があったような…と思い、るりまサーチで検索。
「円周率」と入力して検索すると、2つ目にMath::PIが見つかりました。MathモジュールはRubyに元々組み込まれているもの(つまりrequire
不要で使用可能)で、さまざまな数学関数が定義されています。PI
は円周率の定数です。
p Math::PI #=> 3.141592654
無事求めていたものが見つかったので、それを使って上記コードを書き、paiza.IOでテストしました。問題ページ上の入力例を試しうまくいったので、提出。
改善点など
今回提出したコードを見直してみて、悪くないかなと思いますが、他にもいろんな書き方ができます。
#1行で書く puts gets.to_i * 2 * Math::PI #計算回数を減らす(誤差許容範囲に注意) r = gets.to_i puts r * 6.28
このくらいでは、速度の差はよくわかりませんでした。