Паттерн factory method скрывает, как создаются объекты: вы запрашиваете у фабрики фигуру по имени и получаете объект, который умеет вычислять собственную площадь.
Каждое описание — это имя фигуры, за которым следуют её числа, разделённые пробелами:
circle r: area π·r²square s: area s²rectangle w h: area w·htriangle b h: area b·h / 2
Реализуйте shape_factory_areas(shapes).
Input
shapes: Описания. Числа могут быть с десятичной частью.
Output
Верните площадь каждой фигуры в порядке следования. Допускаются ответы с погрешностью до 1e-6.
Ограничения
1 ≤ число фигур ≤ 1,000
0 < каждое число ≤ 1,000
Примеры
Ввод:
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.
Ввод:
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. Следуйте условию и ограничениям выше.