Đề bài
Mẫu adapter cho phép mã nguồn mong đợi một giao diện có thể làm việc với các đối tượng cung cấp giao diện khác. Ở đây, một bảng điều khiển chỉ hiểu độ C, nhưng các cảm biến lại báo cáo theo những đơn vị khác nhau.
Mỗi giá trị đọc là một chữ cái đơn vị, dấu hai chấm và một giá trị:
C:<value>: đã là Celsius.F:<value>: Fahrenheit, được chuyển đổi bằng (F − 32) × 5 / 9.K:<value>: Kelvin, được chuyển đổi bằng K − 273.15.
Cài đặt sensor_adapter(readings).
Input
readings: Các giá trị đọc thô từ cảm biến.
Output
Trả về mọi giá trị đọc theo Celsius, theo đúng thứ tự. Chấp nhận đáp án sai số trong phạm vi 1e-6.
Ràng buộc
1 ≤ số lần đo ≤ 1,000
−1,000 ≤ giá trị ≤ 1,000
Ví dụ
Đầu vào:
readings = ["C:21.5", "F:212", "K:273.15"]
Kết quả mong đợi:
expected = [21.5, 100.0, 0.0]
Đầu vào:
std::vector<std::string> readings = {"C:21.5", "F:212", "K:273.15"};
Kết quả mong đợi:
std::vector<double> expected = {21.5, 100.0, 0.0};
Đầu vào:
string[] readings = new string[] {"C:21.5", "F:212", "K:273.15"};
Kết quả mong đợi:
double[] expected = new double[] {21.5, 100.0, 0.0};
Giải thích
21.5 °C giữ nguyên; 212 °F là (212 − 32) × 5 / 9 = 100 °C; 273.15 K là 0 °C.
Đầu vào:
readings = ["F:-40"]
Kết quả mong đợi:
expected = [-40.0]
Đầu vào:
std::vector<std::string> readings = {"F:-40"};
Kết quả mong đợi:
std::vector<double> expected = {-40.0};
Đầu vào:
string[] readings = new string[] {"F:-40"};
Kết quả mong đợi:
double[] expected = new double[] {-40.0};
Giải thích
−40 là như nhau ở cả hai thang đo: (−40 − 32) × 5 / 9 = −40.
Hướng tiếp cận
Hãy tự thử trước, sau đó mở từng gợi ý một.
Gợi ý 1
Chữ cái trước dấu hai chấm cho biết đơn vị.
Gợi ý 2
Đổi mỗi số đo sang Celsius bằng công thức riêng.
Gợi ý 3
Đọc số sau dấu hai chấm như số thập phân, kể cả số âm.
Độ phức tạp mong đợi
thời gian O(số lần đo), bộ nhớ phụ O(số lần đo)
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.