Đề bài
Mẫu factory method che giấu cách các đối tượng được tạo: bạn yêu cầu factory tạo một hình theo tên và nhận lại một đối tượng biết tự tính diện tích của nó.
Mỗi mô tả là tên của một hình theo sau bởi các số của nó, cách nhau bởi dấu cách:
circle r: diện tích π·r²square s: diện tích s²rectangle w h: diện tích w·htriangle b h: diện tích b·h / 2
Hãy cài đặt shape_factory_areas(shapes).
Input
shapes: Các mô tả. Các số có thể có phần thập phân.
Output
Trả về diện tích của từng hình, theo thứ tự. Chấp nhận các đáp án sai lệch trong phạm vi 1e-6.
Ràng buộc
1 ≤ số hình ≤ 1,000
0 < mọi số ≤ 1,000
Ví dụ
Đầu vào:
shapes = ["square 3", "rectangle 2 5", "triangle 4 3"]
Kết quả mong đợi:
expected = [9.0, 10.0, 6.0]
Đầu vào:
std::vector<std::string> shapes = {"square 3", "rectangle 2 5", "triangle 4 3"};
Kết quả mong đợi:
std::vector<double> expected = {9.0, 10.0, 6.0};
Đầu vào:
string[] shapes = new string[] {"square 3", "rectangle 2 5", "triangle 4 3"};
Kết quả mong đợi:
double[] expected = new double[] {9.0, 10.0, 6.0};
Giải thích
3² = 9, 2·5 = 10 và 4·3/2 = 6.
Đầu vào:
shapes = ["circle 1"]
Kết quả mong đợi:
expected = [3.141592653589793]
Đầu vào:
std::vector<std::string> shapes = {"circle 1"};
Kết quả mong đợi:
std::vector<double> expected = {3.141592653589793};
Đầu vào:
string[] shapes = new string[] {"circle 1"};
Kết quả mong đợi:
double[] expected = new double[] {3.141592653589793};
Giải thích
π·1² = π ≈ 3.141593.
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Đọc từ đầu tiên để biết cần tạo hình nào.
Gợi ý 2
Gắn mỗi tên hình với công thức diện tích của nó.
Gợi ý 3
Dùng π trong thư viện toán của ngôn ngữ và giữ nguyên độ chính xác.
Độ phức tạp mong đợi
thời gian O(số hình), bộ nhớ phụ O(số hình)
Tham khảo
Thử thách này đã được điều chỉnh cho CodeUtility. Hãy làm theo đề bài và các ràng buộc ở trên.