簡単 0件解決済み 正答率0%

図形ファクトリー

ファクトリーを使ってテキストの説明から形状を作成し、それぞれの面積を返します。

このチャレンジで学べること

  • 文字列の説明からオブジェクトを作る
  • 生成の詳細を 1 つの関数に隠す
  • 図形ごとに自分の面積を計算させる

問題

原文(英語)を表示

ファクトリーメソッド パターンは、オブジェクトがどのように生成されるかを隠します。あなたはファクトリーに名前で形状を要求し、すると自分自身の面積を計算できるオブジェクトが返ってきます。

各説明は、空白で区切られた形状名とその数値で構成されています:

  • circle r: area π·r²
  • square s: area s²
  • rectangle w h: area w·h
  • triangle 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用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。