問題
ファクトリーメソッド パターンは、オブジェクトがどのように生成されるかを隠します。あなたはファクトリーに名前で形状を要求し、すると自分自身の面積を計算できるオブジェクトが返ってきます。
各説明は、空白で区切られた形状名とその数値で構成されています:
circle r: area π·r²square s: area s²rectangle w h: area w·htriangle b h: area b·h / 2
shape_factory_areas(shapes) を実装してください。
入力
shapes: 説明です。数値は小数を含むことがあります。
出力
各形状の面積を、順番通りに返してください。1e-6 以内の誤差は許容されます。
制約
1 ≤ 図形の数 ≤ 1,000
0 < すべての数 ≤ 1,000
例
例 1
入力:
shapes = ["square 3", "rectangle 2 5", "triangle 4 3"]
期待される出力:
expected = [9.0, 10.0, 6.0]
入力:
std::vector<std::string> shapes = {"square 3", "rectangle 2 5", "triangle 4 3"};
期待される出力:
std::vector<double> expected = {9.0, 10.0, 6.0};
入力:
string[] shapes = new string[] {"square 3", "rectangle 2 5", "triangle 4 3"};
期待される出力:
double[] expected = new double[] {9.0, 10.0, 6.0};
解説
3² = 9、2·5 = 10、4·3/2 = 6。
例 2
入力:
shapes = ["circle 1"]
期待される出力:
expected = [3.141592653589793]
入力:
std::vector<std::string> shapes = {"circle 1"};
期待される出力:
std::vector<double> expected = {3.141592653589793};
入力:
string[] shapes = new string[] {"circle 1"};
期待される出力:
double[] expected = new double[] {3.141592653589793};
解説
π·1² = π ≈ 3.141593.
解き方のヒント
まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。
ヒント 1
最初の単語を読んで、どの図形を作るか決めます。
ヒント 2
図形の名前ごとに面積の公式を対応づけます。
ヒント 3
言語の数学ライブラリの π を使い、精度を落とさないようにします。
目安の計算量
時間 O(図形の数)、追加メモリ O(図形の数)
参考資料
この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。