Все задачи
Легко Решено: 0 Процент решений: 0%

Фабрика фигур

Создавать фигуры по текстовым описаниям с помощью фабрики и возвращать площадь каждой из них.

Чему вы научитесь

  • Создавать объекты по текстовому описанию
  • Прятать создание за одной функцией
  • Давать каждой фигуре считать свою площадь

Условие

Паттерн factory method скрывает, как создаются объекты: вы запрашиваете у фабрики фигуру по имени и получаете объект, который умеет вычислять собственную площадь.

Каждое описание — это имя фигуры, за которым следуют её числа, разделённые пробелами:

  • 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).

Input

shapes: Описания. Числа могут быть с десятичной частью.

Output

Верните площадь каждой фигуры в порядке следования. Допускаются ответы с погрешностью до 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

Прочитайте первое слово, чтобы понять, какую фигуру создать.

Подсказка 2

Сопоставьте каждому названию фигуры формулу площади.

Подсказка 3

Берите π из математической библиотеки языка и сохраняйте полную точность.

Ожидаемая сложность

время O(число фигур), доп. память O(число фигур)

Ссылки

Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.

Учитесь у других

Решения сообщества

Пока нет опубликованных решений. Решите задание, чтобы поделиться первым.